From 98d1698076d6b68fd865bf6ba3bd6f357821943f Mon Sep 17 00:00:00 2001 From: GRMrGecko Date: Tue, 17 Sep 2013 08:37:33 -0500 Subject: [PATCH] Current status Fixed issues regarding 10.8 and new attributes. Fixed path subscriber for 10.8. Added TinyGrab plugin source code as I'm now allowed to publish it. Fixed PHP to work on Nginx. --- Classes/CocoaShare/MGMController.h | 6 +- Classes/CocoaShare/MGMController.m | 14 + Classes/CocoaShare/MGMPathSubscriber.h | 17 + Classes/CocoaShare/MGMPathSubscriber.m | 224 +++++- .../CocoaShare/Preferences/MGMEventsPane.h | 6 +- Classes/TinyGrab/MGMTinyGrabPlugIn.h | 24 + Classes/TinyGrab/MGMTinyGrabPlugIn.m | 213 ++++++ Classes/TinyGrab/prefix.pch | 7 + CocoaShare.xcodeproj/project.pbxproj | 218 +++++- .../Versions/A/Headers/MGMPreferences.h | 6 +- .../Versions/A/Resources/MGMTaskView.nib | Bin 0 -> 6853 bytes .../Versions/A/Resources/MGMTasksWindow.nib | Bin 0 -> 7017 bytes .../Versions/A/Resources/TaskRestart.png | Bin 0 -> 558 bytes .../A/Resources/TaskRestartPressed.png | Bin 0 -> 588 bytes .../Versions/A/Resources/TaskReveal.png | Bin 0 -> 503 bytes .../A/Resources/TaskRevealPressed.png | Bin 0 -> 485 bytes .../Versions/A/Resources/TaskStop.png | Bin 0 -> 334 bytes .../Versions/A/Resources/TaskStopPressed.png | Bin 0 -> 391 bytes .../TinyGrab.bundle/Contents/MacOS/TinyGrab | Bin 86468 -> 0 bytes .../English.lproj/TinyGrabAccountPane.nib | Bin 6882 -> 0 bytes .../pt_PT.lproj/TinyGrabAccountPane.nib | Bin 6911 -> 0 bytes .../sv.lproj/TinyGrabAccountPane.nib | Bin 6989 -> 0 bytes .../English.lproj/TinyGrabAccountPane.xib | 718 +++++++++++++++++ .../TinyGrab}/Info.plist | 20 +- .../pt_PT.lproj/TinyGrabAccountPane.xib | 718 +++++++++++++++++ .../TinyGrab/sv.lproj/TinyGrabAccountPane.xib | 719 ++++++++++++++++++ .../TinyGrab}/tinygrab.png | Bin index.php | 4 +- 28 files changed, 2847 insertions(+), 67 deletions(-) create mode 100644 Classes/TinyGrab/MGMTinyGrabPlugIn.h create mode 100644 Classes/TinyGrab/MGMTinyGrabPlugIn.m create mode 100644 Classes/TinyGrab/prefix.pch create mode 100644 Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTaskView.nib create mode 100644 Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTasksWindow.nib create mode 100644 Frameworks/MGMUsers.framework/Versions/A/Resources/TaskRestart.png create mode 100644 Frameworks/MGMUsers.framework/Versions/A/Resources/TaskRestartPressed.png create mode 100644 Frameworks/MGMUsers.framework/Versions/A/Resources/TaskReveal.png create mode 100644 Frameworks/MGMUsers.framework/Versions/A/Resources/TaskRevealPressed.png create mode 100644 Frameworks/MGMUsers.framework/Versions/A/Resources/TaskStop.png create mode 100644 Frameworks/MGMUsers.framework/Versions/A/Resources/TaskStopPressed.png delete mode 100755 PlugIns/TinyGrab.bundle/Contents/MacOS/TinyGrab delete mode 100644 PlugIns/TinyGrab.bundle/Contents/Resources/English.lproj/TinyGrabAccountPane.nib delete mode 100644 PlugIns/TinyGrab.bundle/Contents/Resources/pt_PT.lproj/TinyGrabAccountPane.nib delete mode 100644 PlugIns/TinyGrab.bundle/Contents/Resources/sv.lproj/TinyGrabAccountPane.nib create mode 100644 Resources/TinyGrab/English.lproj/TinyGrabAccountPane.xib rename {PlugIns/TinyGrab.bundle/Contents => Resources/TinyGrab}/Info.plist (58%) create mode 100644 Resources/TinyGrab/pt_PT.lproj/TinyGrabAccountPane.xib create mode 100644 Resources/TinyGrab/sv.lproj/TinyGrabAccountPane.xib rename {PlugIns/TinyGrab.bundle/Contents/Resources => Resources/TinyGrab}/tinygrab.png (100%) diff --git a/Classes/CocoaShare/MGMController.h b/Classes/CocoaShare/MGMController.h index 9bdedca..6d44370 100644 --- a/Classes/CocoaShare/MGMController.h +++ b/Classes/CocoaShare/MGMController.h @@ -36,7 +36,11 @@ extern NSString * const MGMFFilter; @class MGMURLConnectionManager, MGMPreferences, MGMAbout, MGMMenuItem, MGMPathSubscriber; -@interface MGMController : NSObject { +@interface MGMController : NSObject +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060) + +#endif +{ NSTimer *autoreleaseDrain; MGMURLConnectionManager *connectionManager; diff --git a/Classes/CocoaShare/MGMController.m b/Classes/CocoaShare/MGMController.m index 401f020..e51f291 100644 --- a/Classes/CocoaShare/MGMController.m +++ b/Classes/CocoaShare/MGMController.m @@ -532,6 +532,7 @@ static MGMController *MGMSharedController; } } - (void)subscribedPathChanged:(NSString *)thePath { + NSLog(@"Changed: %@", thePath); if (filtersEnabled) { NSFileManager *manager = [NSFileManager defaultManager]; int uploadLimit = [[NSUserDefaults standardUserDefaults] integerForKey:MGMUploadLimit]; @@ -572,6 +573,19 @@ static MGMController *MGMSharedController; } else { NSLog(@"Unable to get metadata of %@", fullPath); } + + NSDictionary *extendedAttributes = nil; + if ([manager respondsToSelector:@selector(attributesOfItemAtPath:error:)]) { + extendedAttributes = [[manager attributesOfItemAtPath:fullPath error:nil] objectForKey:@"NSFileExtendedAttributes"]; + } else { + extendedAttributes = [[manager fileSystemAttributesAtPath:fullPath] objectForKey:@"NSFileExtendedAttributes"]; + } + for (int a=0; a<[[extendedAttributes allKeys] count]; a++) { + if ([[[extendedAttributes allKeys] objectAtIndex:a] isMatchedByRegex:filter]) + [self addPathToUploads:fullPath isAutomatic:YES]; + else if ([[extendedAttributes objectForKey:[[extendedAttributes allKeys] objectAtIndex:a]] isKindOfClass:[NSString class]] && [[extendedAttributes objectForKey:[[extendedAttributes allKeys] objectAtIndex:a]] isMatchedByRegex:filter]) + [self addPathToUploads:fullPath isAutomatic:YES]; + } } else { if ([file isMatchedByRegex:filter]) [self addPathToUploads:fullPath isAutomatic:YES]; diff --git a/Classes/CocoaShare/MGMPathSubscriber.h b/Classes/CocoaShare/MGMPathSubscriber.h index bfbde7f..f315f59 100644 --- a/Classes/CocoaShare/MGMPathSubscriber.h +++ b/Classes/CocoaShare/MGMPathSubscriber.h @@ -7,9 +7,21 @@ // #import +#include +#include extern NSString * const MGMPathSubscriptionChangedNotification; +typedef enum { + MGMFODelete = NOTE_DELETE, + MGMFOWrite = NOTE_WRITE, + MGMFOExtend = NOTE_EXTEND, + MGMFOAttribute = NOTE_ATTRIB, + MGMFOLink = NOTE_LINK, + MGMFORename = NOTE_RENAME, + MGMFORevoke = NOTE_REVOKE +} MGMPathSubscriptionFileOptions; + @protocol MGMPathSubscriberDelegate - (void)subscribedPathChanged:(NSString *)thePath; @end @@ -18,7 +30,11 @@ extern NSString * const MGMPathSubscriptionChangedNotification; id delegate; NSMutableDictionary *subscriptions; FNSubscriptionUPP subscriptionUPP; + CFRunLoopRef runLoop; NSMutableArray *notificationsSending; + + int queueDescriptor; + BOOL fileWatchLoop; } + (id)sharedPathSubscriber; @@ -26,6 +42,7 @@ extern NSString * const MGMPathSubscriptionChangedNotification; - (void)setDelegate:(id)theDelegate; - (void)addPath:(NSString *)thePath; +- (void)addPath:(NSString *)thePath fileOptions:(u_int)theOptions; - (void)removePath:(NSString *)thePath; - (void)removeAllPaths; diff --git a/Classes/CocoaShare/MGMPathSubscriber.m b/Classes/CocoaShare/MGMPathSubscriber.m index 1afe3db..494ba11 100644 --- a/Classes/CocoaShare/MGMPathSubscriber.m +++ b/Classes/CocoaShare/MGMPathSubscriber.m @@ -8,9 +8,61 @@ #import "MGMPathSubscriber.h" +@interface MGMPathSubscriberFile : NSObject { + NSString *path; + int fileDescriptor; + u_int options; +} +- (id)initWithPath:(NSString*)thePath options:(u_int)theOptions; +- (NSString *)path; +- (int)fileDescriptor; +- (u_int)options; +- (BOOL)reopen; +@end + +@implementation MGMPathSubscriberFile +- (id)initWithPath:(NSString*)thePath options:(u_int)theOptions { + if ((self = [super init])) { + path = [thePath copy]; + options = theOptions; + fileDescriptor = open([path fileSystemRepresentation], O_EVTONLY, 0); + if (fileDescriptor<0) { + [self release]; + self = nil; + } + } + return self; +} +- (void)dealloc { + [path release]; + if (fileDescriptor>=0) + close(fileDescriptor); + [super dealloc]; +} +- (NSString *)path { + return path; +} +- (int)fileDescriptor { + return fileDescriptor; +} +- (u_int)options { + return options; +} + +- (BOOL)reopen { + if (fileDescriptor>=0) + close(fileDescriptor); + fileDescriptor = open([path fileSystemRepresentation], O_EVTONLY, 0); + if (fileDescriptor<0) + return NO; + return YES; +} +@end + @interface MGMPathSubscriber (MGMPrivate) - (void)subscriptionChanged:(FNSubscriptionRef)theSubscription; - (void)subscriptionFSChanged:(ConstFSEventStreamRef)theSubscription; +- (void)subscriptionFileChanged:(MGMPathSubscriberFile *)theFile; - (void)sendNotificationForPath:(NSString *)thePath; @end @@ -26,11 +78,11 @@ void MGMPathSubscriptionChange(FNMessage theMessage, OptionBits theFlags, void * void MGMPathSubscriptionFSChange(ConstFSEventStreamRef streamRef, void *thePathSubscription, size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) { for (size_t i=0; i=0) + close(queueDescriptor); + fileWatchLoop = NO; [self removeAllPaths]; DisposeFNSubscriptionUPP(subscriptionUPP); [subscriptions release]; @@ -78,41 +137,76 @@ void MGMPathSubscriptionFSChange(ConstFSEventStreamRef streamRef, void *thePathS } - (void)addPath:(NSString *)thePath { + [self addPath:thePath fileOptions:MGMFODelete | MGMFOWrite | MGMFOExtend | MGMFOAttribute | MGMFOLink | MGMFORename | MGMFORevoke]; +} +- (void)addPath:(NSString *)thePath fileOptions:(u_int)theOptions { NSValue *value = [subscriptions objectForKey:thePath]; if (value!=nil) return; - FSEventStreamContext context = {0, self, NULL, NULL, NULL}; - if ([self OSMajorVersion]==10 && [self OSMinorVersion]>=5) { - FSEventStreamRef stream = FSEventStreamCreate(NULL, &MGMPathSubscriptionFSChange, &context, (CFArrayRef)[NSArray arrayWithObject:thePath], kFSEventStreamEventIdSinceNow, 0.5, kFSEventStreamCreateFlagNone); - if (stream==NULL) { - NSLog(@"MGMPathSubscription: Unable to subscribe to %@", thePath); - return; + + BOOL directory = NO; + BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:thePath isDirectory:&directory]; + if (!exists) { + NSLog(@"MGMPathSubscription: Unable to subscribe to %@ as it does not exist", thePath); + return; + } + if (directory) { + if ([self OSMajorVersion]==10 && [self OSMinorVersion]>=5) { + FSEventStreamContext context = {0, self, NULL, NULL, NULL}; + FSEventStreamRef stream = FSEventStreamCreate(NULL, &MGMPathSubscriptionFSChange, &context, (CFArrayRef)[NSArray arrayWithObject:thePath], kFSEventStreamEventIdSinceNow, 0.5, kFSEventStreamCreateFlagNone); + if (stream==NULL) { + NSLog(@"MGMPathSubscription: Unable to subscribe to %@", thePath); + return; + } + FSEventStreamScheduleWithRunLoop(stream, runLoop, kCFRunLoopDefaultMode); + FSEventStreamStart(stream); + [subscriptions setObject:[NSValue valueWithPointer:stream] forKey:thePath]; + } else { + FNSubscriptionRef subscription = NULL; + OSStatus error = FNSubscribeByPath((UInt8 *)[thePath fileSystemRepresentation], subscriptionUPP, self, kFNNotifyInBackground, &subscription); + if (error!=noErr) { + NSLog(@"MGMPathSubscription: Unable to subscribe to %@ due to the error %ld", thePath, (long)error); + return; + } + [subscriptions setObject:[NSValue valueWithPointer:subscription] forKey:thePath]; } - FSEventStreamScheduleWithRunLoop(stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - FSEventStreamStart(stream); - [subscriptions setObject:[NSValue valueWithPointer:stream] forKey:thePath]; } else { - FNSubscriptionRef subscription = NULL; - OSStatus error = FNSubscribeByPath((UInt8 *)[thePath fileSystemRepresentation], subscriptionUPP, self, kFNNotifyInBackground, &subscription); - if (error!=noErr) { - NSLog(@"MGMPathSubscription: Unable to subscribe to %@ due to the error %ld", thePath, (long)error); - return; + MGMPathSubscriberFile *file = [[[MGMPathSubscriberFile alloc] initWithPath:thePath options:theOptions] autorelease]; + + if (file==nil) { + NSLog(@"MGMPathSubscription: Unable to subscribe to %@ due to an error", thePath); + return; + } + + struct timespec nullts = { 0, 0 }; + struct kevent event; + EV_SET(&event, [file fileDescriptor], EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR, theOptions, 0, file); + + [subscriptions setObject:file forKey:thePath]; + kevent(queueDescriptor, &event, 1, NULL, 0, &nullts); + + if (!fileWatchLoop) { + fileWatchLoop = YES; + [NSThread detachNewThreadSelector:@selector(fileWatchThread) toTarget:self withObject:nil]; } - [subscriptions setObject:[NSValue valueWithPointer:subscription] forKey:thePath]; } } - (void)removePath:(NSString *)thePath { NSValue *value = [subscriptions objectForKey:thePath]; if (value!=nil) { - if ([self OSMajorVersion]==10 && [self OSMinorVersion]>=5) { - FSEventStreamRef stream = [value pointerValue]; - FSEventStreamStop(stream); - FSEventStreamUnscheduleFromRunLoop(stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - FSEventStreamInvalidate(stream); - FSEventStreamRelease(stream); - [subscriptions removeObjectForKey:thePath]; + if ([value isKindOfClass:[NSValue class]]) { + if ([self OSMajorVersion]==10 && [self OSMinorVersion]>=5) { + FSEventStreamRef stream = [value pointerValue]; + FSEventStreamStop(stream); + FSEventStreamUnscheduleFromRunLoop(stream, runLoop, kCFRunLoopDefaultMode); + FSEventStreamInvalidate(stream); + FSEventStreamRelease(stream); + [subscriptions removeObjectForKey:thePath]; + } else { + FNUnsubscribe([value pointerValue]); + [subscriptions removeObjectForKey:thePath]; + } } else { - FNUnsubscribe([value pointerValue]); [subscriptions removeObjectForKey:thePath]; } } @@ -120,7 +214,18 @@ void MGMPathSubscriptionFSChange(ConstFSEventStreamRef streamRef, void *thePathS - (void)removeAllPaths { NSArray *keys = [subscriptions allKeys]; for (int i=0; i<[keys count]; i++) { - FNUnsubscribe([[subscriptions objectForKey:[keys objectAtIndex:i]] pointerValue]); + NSValue *value = [subscriptions objectForKey:[keys objectAtIndex:i]]; + if ([value isKindOfClass:[NSValue class]]) { + if ([self OSMajorVersion]==10 && [self OSMinorVersion]>=5) { + FSEventStreamRef stream = [value pointerValue]; + FSEventStreamStop(stream); + FSEventStreamUnscheduleFromRunLoop(stream, runLoop, kCFRunLoopDefaultMode); + FSEventStreamInvalidate(stream); + FSEventStreamRelease(stream); + } else { + FNUnsubscribe([value pointerValue]); + } + } } [subscriptions removeAllObjects]; } @@ -149,9 +254,76 @@ void MGMPathSubscriptionFSChange(ConstFSEventStreamRef streamRef, void *thePathS } } } +- (void)subscriptionFileChanged:(MGMPathSubscriberFile *)theFile { + NSArray *keys = [subscriptions allKeysForObject:theFile]; + if ([keys count]>=1) { + NSString *path = [keys objectAtIndex:0]; + if (![notificationsSending containsObject:path]) { + [notificationsSending addObject:path]; + [self performSelector:@selector(sendNotificationForPath:) withObject:path afterDelay:0.5]; + } + } +} + - (void)sendNotificationForPath:(NSString *)thePath { [[NSNotificationCenter defaultCenter] postNotificationName:MGMSubscribedPathChangedNotification object:thePath]; if ([delegate respondsToSelector:@selector(subscribedPathChanged:)]) [delegate subscribedPathChanged:thePath]; [notificationsSending removeObject:thePath]; } + +- (void)fileWatchThread { + int status; + struct kevent event; + struct timespec timeout = {1, 0}; + int queueFD = queueDescriptor; + + while (fileWatchLoop) { + @try { + status = kevent(queueFD, NULL, 0, &event, 1, &timeout); + if (status>0) { + MGMPathSubscriberFile *file = [(id)event.udata retain]; + if (event.filter==EVFILT_VNODE && event.fflags && file!=nil) { + if ((event.fflags & NOTE_RENAME)==NOTE_RENAME) { + [self performSelectorOnMainThread:@selector(subscriptionFileChanged:) withObject:file waitUntilDone:NO]; + } + if ((event.fflags & NOTE_WRITE)==NOTE_WRITE) { + [self performSelectorOnMainThread:@selector(subscriptionFileChanged:) withObject:file waitUntilDone:NO]; + } + if ((event.fflags & NOTE_DELETE)==NOTE_DELETE) { + [self performSelectorOnMainThread:@selector(subscriptionFileChanged:) withObject:file waitUntilDone:NO]; + + if ([file reopen]) { + struct timespec nullts = { 0, 0 }; + struct kevent event; + EV_SET(&event, [file fileDescriptor], EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR, [file options], 0, file); + + kevent(queueDescriptor, &event, 1, NULL, 0, &nullts); + } else { + [self removePath:[file path]]; + } + } + if ((event.fflags & NOTE_ATTRIB)==NOTE_ATTRIB) { + [self performSelectorOnMainThread:@selector(subscriptionFileChanged:) withObject:file waitUntilDone:NO]; + } + if ((event.fflags & NOTE_EXTEND)==NOTE_EXTEND) { + [self performSelectorOnMainThread:@selector(subscriptionFileChanged:) withObject:file waitUntilDone:NO]; + } + if ((event.fflags & NOTE_LINK)==NOTE_LINK) { + [self performSelectorOnMainThread:@selector(subscriptionFileChanged:) withObject:file waitUntilDone:NO]; + } + if ((event.fflags & NOTE_REVOKE)==NOTE_REVOKE) { + [self performSelectorOnMainThread:@selector(subscriptionFileChanged:) withObject:file waitUntilDone:NO]; + } + } + [file release]; + } + } @catch (NSException *exception) { + NSLog(@"MGMPathSubscription: Error in fileWatchThread: %@", exception); + } + } + + if (close(queueFD)==-1) + NSLog(@"MGMPathSubscription: fileWatchThread couldn't close queue descriptor %d", errno); + queueDescriptor = -1; +} @end \ No newline at end of file diff --git a/Classes/CocoaShare/Preferences/MGMEventsPane.h b/Classes/CocoaShare/Preferences/MGMEventsPane.h index 02afb1b..8f8c64c 100644 --- a/Classes/CocoaShare/Preferences/MGMEventsPane.h +++ b/Classes/CocoaShare/Preferences/MGMEventsPane.h @@ -9,7 +9,11 @@ #import #import -@interface MGMEventsPane : MGMPreferencesPane { +@interface MGMEventsPane : MGMPreferencesPane +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060) + +#endif +{ IBOutlet NSView *view; IBOutlet NSPopUpButton *eventPopUp; IBOutlet NSPopUpButton *soundPopUp; diff --git a/Classes/TinyGrab/MGMTinyGrabPlugIn.h b/Classes/TinyGrab/MGMTinyGrabPlugIn.h new file mode 100644 index 0000000..20ff6ca --- /dev/null +++ b/Classes/TinyGrab/MGMTinyGrabPlugIn.h @@ -0,0 +1,24 @@ +// +// MGMTinyGrabPlugIn.h +// CocoaShare +// +// Created by James on 1/31/11. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// + +#import + +@interface MGMTinyGrabPlugIn : NSObject { + IBOutlet NSView *view; + IBOutlet NSTextField *emailField; + IBOutlet NSTextField *passwordField; + IBOutlet NSTextField *typeField; + IBOutlet NSButton *loginButton; +} +- (void)releaseView; + +- (void)lockLogin; +- (void)unlockLogin; +- (void)login:(id)sender; +- (IBAction)registerAccount:(id)sender; +@end \ No newline at end of file diff --git a/Classes/TinyGrab/MGMTinyGrabPlugIn.m b/Classes/TinyGrab/MGMTinyGrabPlugIn.m new file mode 100644 index 0000000..5bc4318 --- /dev/null +++ b/Classes/TinyGrab/MGMTinyGrabPlugIn.m @@ -0,0 +1,213 @@ +// +// MGMTinyGrabPlugIn.m +// CocoaShare +// +// Created by James on 1/31/11. +// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ +// + +#import "MGMTinyGrabPlugIn.h" +#import "MGMController.h" +#import "MGMAddons.h" +#import + +NSString * const MGMTinyGrabPostMethod = @"POST"; +NSString * const MGMTinyGrabURLForm = @"application/x-www-form-urlencoded"; +NSString * const MGMTinyGrabContentType = @"content-type"; + +NSString * const MGMTinyGrabAPI = @"http://tinygrab.com/api/v3.php?m=%@"; +NSString * const MGMTinyGrabAPIVerify = @"user/verify"; +NSString * const MGMTinyGrabAPIUpload = @"grab/upload"; + +NSString * const MGMTinyGrabAPIRError = @"X-Error-Text"; +NSString * const MGMTinyGrabAPIRErrorCode = @"X-Error-Code"; +NSString * const MGMTinyGrabAPIREmail = @"X-User-Email"; +NSString * const MGMTinyGrabAPIRJoinDate = @"X-User-Joindate"; +NSString * const MGMTinyGrabAPIRName = @"X-User-Name"; +NSString * const MGMTinyGrabAPIRPaid = @"X-User-Paid"; + +NSString * const MGMTinyGrabAPIRDate = @"X-Grab-Date"; +NSString * const MGMTinyGrabAPIRID = @"X-Grab-Id"; +NSString * const MGMTinyGrabAPIRURL = @"X-Grab-Url"; + +NSString * const MGMTinyGrabEmail = @"MGMTinyGrabEmail"; +NSString * const MGMTinyGrabType = @"MGMTinyGrabType"; + +const BOOL MGMTinyGrabResponseInvisible = YES; + +@implementation MGMTinyGrabPlugIn +- (void)dealloc { + [self releaseView]; + [super dealloc]; +} + +- (BOOL)isAccountPlugIn { + return YES; +} +- (NSString *)plugInName { + return @"TinyGrab"; +} +- (NSView *)plugInView { + if (view==nil) { + if (![NSBundle loadNibNamed:@"TinyGrabAccountPane" owner:self]) { + NSLog(@"Unable to load TinyGrab Account Pane"); + } else { + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *email = [defaults objectForKey:MGMTinyGrabEmail]; + if (email!=nil) + [emailField setStringValue:email]; + NSString *password = [[MGMController sharedController] password]; + if (password!=nil) + [passwordField setStringValue:password]; + NSString *type = [defaults objectForKey:MGMTinyGrabType]; + if (type!=nil) + [typeField setStringValue:[[type capitalizedString] localizedFor:self]]; + } + } + return view; +} +- (void)releaseView { + [view release]; + view = nil; + emailField = nil; + passwordField = nil; + loginButton = nil; +} + +- (NSArray *)allowedExtensions { + return [NSArray arrayWithObjects:@"png", @"jpg", nil]; +} + +- (void)setCurrentPlugIn:(BOOL)isCurrent { + if (!isCurrent) { + [[[MGMController sharedController] connectionManager] cancelAll]; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults removeObjectForKey:MGMTinyGrabEmail]; + } +} + +- (void)lockLogin { + [emailField setEnabled:NO]; + [passwordField setEnabled:NO]; + [loginButton setEnabled:NO]; + [loginButton setTitle:[@"Logging In" localizedFor:self]]; +} +- (void)unlockLogin { + [emailField setEnabled:YES]; + [passwordField setEnabled:YES]; + [loginButton setEnabled:YES]; + [loginButton setTitle:[@"Login" localizedFor:self]]; +} + +- (IBAction)login:(id)sender { + if ([[emailField stringValue] isEqual:@""]) { + NSAlert *alert = [[NSAlert new] autorelease]; + [alert setMessageText:[@"Email Required" localizedFor:self]]; + [alert setInformativeText:[@"Please enter your email." localizedFor:self]]; + [alert runModal]; + } else { + [[MGMController sharedController] setPassword:[passwordField stringValue]]; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setObject:[emailField stringValue] forKey:MGMTinyGrabEmail]; + [typeField setStringValue:[@"Unknown" localizedFor:self]]; + [self lockLogin]; + + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:MGMTinyGrabAPI, MGMTinyGrabAPIVerify]]]; + [request setHTTPMethod:MGMTinyGrabPostMethod]; + [request setValue:MGMTinyGrabURLForm forHTTPHeaderField:MGMTinyGrabContentType]; + [request setHTTPBody:[[NSString stringWithFormat:@"email=%@&passwordhash=%@", [[defaults objectForKey:MGMTinyGrabEmail] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding], [[[MGMController sharedController] password] MD5]] dataUsingEncoding:NSUTF8StringEncoding]]; + MGMURLBasicHandler *handler = [MGMURLBasicHandler handlerWithRequest:request delegate:self]; + [handler setFailWithError:@selector(check:didFailWithError:)]; + [handler setFinish:@selector(checkDidFinish:)]; + [handler setInvisible:MGMTinyGrabResponseInvisible]; + [[[MGMController sharedController] connectionManager] addHandler:handler]; + } +} +- (IBAction)registerAccount:(id)sender { + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://tinygrab.com/register"]]; +} +- (void)check:(MGMURLBasicHandler *)theHandler didFailWithError:(NSError *)theError { + NSLog(@"HTTP Error: %@", theError); + NSAlert *alert = [[NSAlert new] autorelease]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[theError localizedDescription]]; + [alert runModal]; + [self unlockLogin]; +} +- (void)checkDidFinish:(MGMURLBasicHandler *)theHandler { + NSDictionary *headers = [[theHandler response] allHeaderFields]; + if ([headers objectForKey:MGMTinyGrabAPIRError]!=nil) { + NSAlert *alert = [[NSAlert new] autorelease]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[headers objectForKey:MGMTinyGrabAPIRError]]; + [alert runModal]; + [self unlockLogin]; + } else { + NSString *type = [headers objectForKey:MGMTinyGrabAPIRPaid]; + if (type==nil || [type isEqual:@"free"]) { + NSAlert *alert = [[NSAlert new] autorelease]; + [alert setMessageText:[@"Account Error" localizedFor:self]]; + [alert setInformativeText:[@"Only paid users are allowed to use TinyGrab in CocoaShare, sorry." localizedFor:self]]; + [alert runModal]; + [self unlockLogin]; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults removeObjectForKey:MGMTinyGrabEmail]; + } else { + [typeField setStringValue:[[type capitalizedString] localizedFor:self]]; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setObject:type forKey:MGMTinyGrabType]; + NSAlert *alert = [[NSAlert new] autorelease]; + [alert setMessageText:[@"Login Successful" localizedFor:self]]; + [alert setInformativeText:[@"You have sucessfully logged into your account." localizedFor:self]]; + [alert runModal]; + [self unlockLogin]; + } + } +} + +- (void)sendFileAtPath:(NSString *)thePath withName:(NSString *)theName { + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + if ([defaults objectForKey:MGMTinyGrabEmail]==nil || [defaults objectForKey:MGMTinyGrabType]==nil) { + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:5 userInfo:[NSDictionary dictionaryWithObject:[@"Account is not logged in." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; + [[MGMController sharedController] upload:thePath receivedError:error]; + return; + } + + srandomdev(); + NSString *boundary = [NSString stringWithFormat:@"----Boundary+%d", random()%100000]; + + NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:MGMTinyGrabAPI, MGMTinyGrabAPIUpload]] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:120.0]; + [postRequest setHTTPMethod:MGMTinyGrabPostMethod]; + [postRequest setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary, nil] forHTTPHeaderField:@"Content-Type"]; + + NSMutableDictionary *data = [NSMutableDictionary dictionary]; + [data setObject:[defaults objectForKey:MGMTinyGrabEmail] forKey:@"email"]; + [data setObject:[[[MGMController sharedController] password] MD5] forKey:@"passwordhash"]; + [data setObject:[NSDictionary dictionaryWithObjectsAndKeys:thePath, MGMMPFPath, theName, MGMMPFName, nil] forKey:@"upload"]; + [postRequest setHTTPBody:[data buildMultiPartBodyWithBoundary:boundary]]; + MGMURLBasicHandler *handler = [MGMURLBasicHandler handlerWithRequest:postRequest delegate:self]; + [handler setFailWithError:@selector(upload:didFailWithError:)]; + [handler setFinish:@selector(uploadDidFinish:)]; + [handler setInvisible:MGMTinyGrabResponseInvisible]; + [handler setObject:thePath]; + [[[MGMController sharedController] connectionManager] addHandler:handler]; +} +- (void)upload:(MGMURLBasicHandler *)theHandler didFailWithError:(NSError *)theError { + [[MGMController sharedController] upload:[theHandler object] receivedError:theError]; +} +- (void)uploadDidFinish:(MGMURLBasicHandler *)theHandler { + NSDictionary *headers = [[theHandler response] allHeaderFields]; + if ([headers objectForKey:MGMTinyGrabAPIRError]!=nil) { + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:[[headers objectForKey:MGMTinyGrabAPIRErrorCode] intValue] userInfo:[NSDictionary dictionaryWithObject:[headers objectForKey:MGMTinyGrabAPIRError] forKey:NSLocalizedDescriptionKey]]; + [[MGMController sharedController] upload:[theHandler object] receivedError:error]; + } else { + if ([headers objectForKey:MGMTinyGrabAPIRURL]!=nil) { + [[MGMController sharedController] uploadFinished:[theHandler object] url:[NSURL URLWithString:[headers objectForKey:MGMTinyGrabAPIRURL]]]; + } else { + NSError *error = [NSError errorWithDomain:[[NSBundle bundleForClass:[self class]] bundleIdentifier] code:4 userInfo:[NSDictionary dictionaryWithObject:[@"Unable to receive url." localizedFor:self] forKey:NSLocalizedDescriptionKey]]; + [[MGMController sharedController] upload:[theHandler object] receivedError:error]; + } + } +} + +@end \ No newline at end of file diff --git a/Classes/TinyGrab/prefix.pch b/Classes/TinyGrab/prefix.pch new file mode 100644 index 0000000..267d1c6 --- /dev/null +++ b/Classes/TinyGrab/prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'CocoaShare' target in the 'CocoaShare' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/CocoaShare.xcodeproj/project.pbxproj b/CocoaShare.xcodeproj/project.pbxproj index 047876f..a886ec0 100644 --- a/CocoaShare.xcodeproj/project.pbxproj +++ b/CocoaShare.xcodeproj/project.pbxproj @@ -103,9 +103,14 @@ 2A52DF5812E3D041000FC8CD /* menuiconselected.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A52DF5712E3D041000FC8CD /* menuiconselected.png */; }; 2A52DF7312E3D436000FC8CD /* MGMMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A52DF7212E3D436000FC8CD /* MGMMenuItem.m */; }; 2A55259D12F05BA700F97FE6 /* MGMFTPPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C8CB412EF854D00A75AB7 /* MGMFTPPlugIn.m */; }; - 2A5531CA1306C9EF00095E2A /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A5531C91306C9EE00095E2A /* Carbon.framework */; }; 2A5C1B0812F2FB5D005153FA /* MGMWebDavPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5C1B0712F2FB5D005153FA /* MGMWebDavPlugIn.m */; }; 2A5C1B4912F32EE3005153FA /* WebDav.bundle in PlugIns */ = {isa = PBXBuildFile; fileRef = 2A5C1AF312F2FA6F005153FA /* WebDav.bundle */; }; + 2ACA5CD8160E76C700F294C2 /* MGMTinyGrabPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACA5CD7160E76C700F294C2 /* MGMTinyGrabPlugIn.m */; }; + 2ACA5CF1160E782700F294C2 /* TinyGrabAccountPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2ACA5CEB160E782700F294C2 /* TinyGrabAccountPane.xib */; }; + 2ACA5CF3160E782700F294C2 /* tinygrab.png in Resources */ = {isa = PBXBuildFile; fileRef = 2ACA5CF0160E782700F294C2 /* tinygrab.png */; }; + 2ACA5CF4160E795600F294C2 /* MGMUsers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AEAB3F112E2A57400552BAA /* MGMUsers.framework */; }; + 2ACA5CF6160E796B00F294C2 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ACA5CF5160E796B00F294C2 /* Carbon.framework */; }; + 2ACA5CF9160E79A000F294C2 /* TinyGrab.bundle in PlugIns */ = {isa = PBXBuildFile; fileRef = 2ACA5CC7160E763A00F294C2 /* TinyGrab.bundle */; }; 2AEAB3F312E2A57400552BAA /* GeckoReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AEAB3EF12E2A57400552BAA /* GeckoReporter.framework */; }; 2AEAB3F412E2A57400552BAA /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AEAB3F012E2A57400552BAA /* Growl.framework */; }; 2AEAB3F512E2A57500552BAA /* MGMUsers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AEAB3F112E2A57400552BAA /* MGMUsers.framework */; }; @@ -131,7 +136,6 @@ 2AEAB53712E2B68300552BAA /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 2AEAB53612E2B68300552BAA /* dsa_pub.pem */; }; 2AEF115912F527B900F495BE /* About.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2AEF115812F527B900F495BE /* About.rtf */; }; 2AEF118612F52A7D00F495BE /* CocoaShareIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 2AEF118512F52A7D00F495BE /* CocoaShareIcon.png */; }; - 2AEF169812F7894100F495BE /* TinyGrab.bundle in PlugIns */ = {isa = PBXBuildFile; fileRef = 2AEF168B12F7893500F495BE /* TinyGrab.bundle */; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; /* End PBXBuildFile section */ @@ -185,6 +189,13 @@ remoteGlobalIDString = 2A5C1AF212F2FA6F005153FA; remoteInfo = WebDav; }; + 2ACA5CF7160E799400F294C2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2ACA5CC6160E763A00F294C2; + remoteInfo = TinyGrab; + }; 2AD9EFB212FEE51500FD7560 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -207,8 +218,8 @@ 2A2F995412F094F10069B37E /* SFTP.bundle in PlugIns */, 2A5C1B4912F32EE3005153FA /* WebDav.bundle in PlugIns */, 2A0501F812F49D4E000F74EA /* MobileMe.bundle in PlugIns */, + 2ACA5CF9160E79A000F294C2 /* TinyGrab.bundle in PlugIns */, 2A0503CC12F4D464000F74EA /* twitpic.bundle in PlugIns */, - 2AEF169812F7894100F495BE /* TinyGrab.bundle in PlugIns */, ); name = PlugIns; runOnlyForDeploymentPostprocessing = 0; @@ -410,13 +421,23 @@ 2A52DF5712E3D041000FC8CD /* menuiconselected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menuiconselected.png; sourceTree = ""; }; 2A52DF7112E3D436000FC8CD /* MGMMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMMenuItem.h; sourceTree = ""; }; 2A52DF7212E3D436000FC8CD /* MGMMenuItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMMenuItem.m; sourceTree = ""; }; - 2A5531C91306C9EE00095E2A /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = ../../../System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 2A5C1AF312F2FA6F005153FA /* WebDav.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebDav.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 2A5C1AFE12F2FAF3005153FA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2A5C1B0012F2FB04005153FA /* prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prefix.pch; path = Classes/WebDav/prefix.pch; sourceTree = ""; }; 2A5C1B0312F2FB3F005153FA /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/WebDavAccountPane.xib; sourceTree = ""; }; 2A5C1B0612F2FB5D005153FA /* MGMWebDavPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMWebDavPlugIn.h; sourceTree = ""; }; 2A5C1B0712F2FB5D005153FA /* MGMWebDavPlugIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMWebDavPlugIn.m; sourceTree = ""; }; + 2ACA5CC7160E763A00F294C2 /* TinyGrab.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TinyGrab.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 2ACA5CC8160E763A00F294C2 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 2ACA5CD5160E76B300F294C2 /* prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prefix.pch; path = Classes/TinyGrab/prefix.pch; sourceTree = ""; }; + 2ACA5CD6160E76C700F294C2 /* MGMTinyGrabPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MGMTinyGrabPlugIn.h; path = TinyGrab/MGMTinyGrabPlugIn.h; sourceTree = ""; }; + 2ACA5CD7160E76C700F294C2 /* MGMTinyGrabPlugIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGMTinyGrabPlugIn.m; path = TinyGrab/MGMTinyGrabPlugIn.m; sourceTree = ""; }; + 2ACA5CEC160E782700F294C2 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/TinyGrabAccountPane.xib; sourceTree = ""; }; + 2ACA5CED160E782700F294C2 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2ACA5CEE160E782700F294C2 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt_PT; path = pt_PT.lproj/TinyGrabAccountPane.xib; sourceTree = ""; }; + 2ACA5CEF160E782700F294C2 /* sv */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = sv; path = sv.lproj/TinyGrabAccountPane.xib; sourceTree = ""; }; + 2ACA5CF0160E782700F294C2 /* tinygrab.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tinygrab.png; sourceTree = ""; }; + 2ACA5CF5160E796B00F294C2 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; 2AEAB3EF12E2A57400552BAA /* GeckoReporter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GeckoReporter.framework; path = Frameworks/GeckoReporter.framework; sourceTree = ""; }; 2AEAB3F012E2A57400552BAA /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Growl.framework; path = Frameworks/Growl.framework; sourceTree = ""; }; 2AEAB3F112E2A57400552BAA /* MGMUsers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MGMUsers.framework; path = Frameworks/MGMUsers.framework; sourceTree = ""; }; @@ -447,7 +468,6 @@ 2AEAB53612E2B68300552BAA /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = ""; }; 2AEF115812F527B900F495BE /* About.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = About.rtf; sourceTree = SOURCE_ROOT; }; 2AEF118512F52A7D00F495BE /* CocoaShareIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = CocoaShareIcon.png; sourceTree = SOURCE_ROOT; }; - 2AEF168B12F7893500F495BE /* TinyGrab.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = TinyGrab.bundle; sourceTree = ""; }; 8D1107320486CEB800E47090 /* CocoaShare.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CocoaShare.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -505,10 +525,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2ACA5CC4160E763A00F294C2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2ACA5CF4160E795600F294C2 /* MGMUsers.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8D11072E0486CEB800E47090 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 2ACA5CF6160E796B00F294C2 /* Carbon.framework in Frameworks */, 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 2AEAB3F312E2A57400552BAA /* GeckoReporter.framework in Frameworks */, 2AEAB3F412E2A57400552BAA /* Growl.framework in Frameworks */, @@ -516,7 +545,6 @@ 2AEAB3F612E2A57500552BAA /* Sparkle.framework in Frameworks */, 2A48833512E52EAA001618B5 /* libicucore.dylib in Frameworks */, 2A0504F312F4F024000F74EA /* QuartzCore.framework in Frameworks */, - 2A5531CA1306C9EF00095E2A /* Carbon.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -526,7 +554,7 @@ 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( - 2A5531C91306C9EE00095E2A /* Carbon.framework */, + 2ACA5CF5160E796B00F294C2 /* Carbon.framework */, 2AEAB3EF12E2A57400552BAA /* GeckoReporter.framework */, 2AEAB3F012E2A57400552BAA /* Growl.framework */, 2AEAB3F112E2A57400552BAA /* MGMUsers.framework */, @@ -559,6 +587,7 @@ 2A5C1AF312F2FA6F005153FA /* WebDav.bundle */, 2A0501F112F49D08000F74EA /* MobileMe.bundle */, 2A0503C312F4D43B000F74EA /* twitpic.bundle */, + 2ACA5CC7160E763A00F294C2 /* TinyGrab.bundle */, ); name = Products; sourceTree = ""; @@ -570,7 +599,6 @@ 29B97315FDCFA39411CA2CEA /* Other Sources */, 2AEAB48112E2ADDF00552BAA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, - 2AEF160E12F786C700F495BE /* PlugIns */, 19C28FACFE9D520D11CA2CBB /* Products */, ); name = CocoaShare; @@ -586,6 +614,7 @@ 2A2F996212F095380069B37E /* SFTP */, 2A5C1B0212F2FB09005153FA /* WebDav */, 2A05020512F49DF4000F74EA /* MobileMe */, + 2ACA5CD4160E764B00F294C2 /* TinyGrab */, 2A0503D312F4D4B0000F74EA /* twitpic */, ); name = "Other Sources"; @@ -596,6 +625,7 @@ children = ( 2A48833312E52E9B001618B5 /* Linked Libraries */, 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + 2ACA5CC8160E763A00F294C2 /* CoreFoundation.framework */, 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, ); name = Frameworks; @@ -942,6 +972,33 @@ name = WebDav; sourceTree = ""; }; + 2ACA5CC2160E75F000F294C2 /* TinyGrab */ = { + isa = PBXGroup; + children = ( + 2ACA5CD6160E76C700F294C2 /* MGMTinyGrabPlugIn.h */, + 2ACA5CD7160E76C700F294C2 /* MGMTinyGrabPlugIn.m */, + ); + name = TinyGrab; + sourceTree = ""; + }; + 2ACA5CD4160E764B00F294C2 /* TinyGrab */ = { + isa = PBXGroup; + children = ( + 2ACA5CD5160E76B300F294C2 /* prefix.pch */, + ); + name = TinyGrab; + sourceTree = ""; + }; + 2ACA5CEA160E782700F294C2 /* TinyGrab */ = { + isa = PBXGroup; + children = ( + 2ACA5CEB160E782700F294C2 /* TinyGrabAccountPane.xib */, + 2ACA5CED160E782700F294C2 /* Info.plist */, + 2ACA5CF0160E782700F294C2 /* tinygrab.png */, + ); + path = TinyGrab; + sourceTree = ""; + }; 2AEAB45B12E2ACEA00552BAA /* Classes */ = { isa = PBXGroup; children = ( @@ -952,6 +1009,7 @@ 2A2F996012F095320069B37E /* SFTP */, 2A5C1AFF12F2FB04005153FA /* WebDav */, 2A05020312F49DF0000F74EA /* MobileMe */, + 2ACA5CC2160E75F000F294C2 /* TinyGrab */, 2A0503D112F4D4AA000F74EA /* twitpic */, ); path = Classes; @@ -1007,6 +1065,7 @@ 2A2F996612F0955B0069B37E /* SFTP */, 2A5C1AFD12F2FAF3005153FA /* WebDav */, 2A05020112F49DDD000F74EA /* MobileMe */, + 2ACA5CEA160E782700F294C2 /* TinyGrab */, 2A0503CF12F4D49E000F74EA /* twitpic */, ); path = Resources; @@ -1048,14 +1107,6 @@ path = Preferences; sourceTree = ""; }; - 2AEF160E12F786C700F495BE /* PlugIns */ = { - isa = PBXGroup; - children = ( - 2AEF168B12F7893500F495BE /* TinyGrab.bundle */, - ); - path = PlugIns; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -1178,6 +1229,23 @@ productReference = 2A5C1AF312F2FA6F005153FA /* WebDav.bundle */; productType = "com.apple.product-type.bundle"; }; + 2ACA5CC6160E763A00F294C2 /* TinyGrab */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2ACA5CD1160E763A00F294C2 /* Build configuration list for PBXNativeTarget "TinyGrab" */; + buildPhases = ( + 2ACA5CC3160E763A00F294C2 /* Sources */, + 2ACA5CC4160E763A00F294C2 /* Frameworks */, + 2ACA5CC5160E763A00F294C2 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TinyGrab; + productName = TinyGrab; + productReference = 2ACA5CC7160E763A00F294C2 /* TinyGrab.bundle */; + productType = "com.apple.product-type.bundle"; + }; 8D1107260486CEB800E47090 /* CocoaShare */ = { isa = PBXNativeTarget; buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "CocoaShare" */; @@ -1198,6 +1266,7 @@ 2A2F994C12F094EA0069B37E /* PBXTargetDependency */, 2A5C1B4712F32EDF005153FA /* PBXTargetDependency */, 2A0501FA12F49D54000F74EA /* PBXTargetDependency */, + 2ACA5CF8160E799400F294C2 /* PBXTargetDependency */, 2A0503CA12F4D460000F74EA /* PBXTargetDependency */, ); name = CocoaShare; @@ -1224,6 +1293,7 @@ portuguese, pt_PT, sv, + en, ); mainGroup = 29B97314FDCFA39411CA2CEA /* CocoaShare */; projectDirPath = ""; @@ -1236,6 +1306,7 @@ 2A2F994412F094710069B37E /* SFTP */, 2A5C1AF212F2FA6F005153FA /* WebDav */, 2A0501F012F49D08000F74EA /* MobileMe */, + 2ACA5CC6160E763A00F294C2 /* TinyGrab */, 2A0503C212F4D43B000F74EA /* twitpic */, 2AD9EFAD12FEE1E000FD7560 /* Build Directory */, ); @@ -1301,6 +1372,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2ACA5CC5160E763A00F294C2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2ACA5CF1160E782700F294C2 /* TinyGrabAccountPane.xib in Resources */, + 2ACA5CF3160E782700F294C2 /* tinygrab.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8D1107290486CEB800E47090 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1434,6 +1514,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2ACA5CC3160E763A00F294C2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2ACA5CD8160E76C700F294C2 /* MGMTinyGrabPlugIn.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8D11072C0486CEB800E47090 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1500,6 +1588,11 @@ target = 2A5C1AF212F2FA6F005153FA /* WebDav */; targetProxy = 2A5C1B4612F32EDF005153FA /* PBXContainerItemProxy */; }; + 2ACA5CF8160E799400F294C2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2ACA5CC6160E763A00F294C2 /* TinyGrab */; + targetProxy = 2ACA5CF7160E799400F294C2 /* PBXContainerItemProxy */; + }; 2AD9EFB312FEE51500FD7560 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2AD9EFAD12FEE1E000FD7560 /* Build Directory */; @@ -1599,6 +1692,16 @@ name = twitpicPostWindow.xib; sourceTree = ""; }; + 2ACA5CEB160E782700F294C2 /* TinyGrabAccountPane.xib */ = { + isa = PBXVariantGroup; + children = ( + 2ACA5CEC160E782700F294C2 /* English */, + 2ACA5CEE160E782700F294C2 /* pt_PT */, + 2ACA5CEF160E782700F294C2 /* sv */, + ); + name = TinyGrabAccountPane.xib; + sourceTree = ""; + }; 2AEAB48312E2ADDF00552BAA /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -2026,6 +2129,77 @@ }; name = Release; }; + 2ACA5CD2160E763A00F294C2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/Frameworks\"", + ); + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Classes/TinyGrab/prefix.pch; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + INFOPLIST_FILE = Resources/TinyGrab/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + OTHER_LDFLAGS = ( + "-undefined", + suppress, + "-undefined", + dynamic_lookup, + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 2ACA5CD3160E763A00F294C2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/Frameworks\"", + ); + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Classes/TinyGrab/prefix.pch; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + INFOPLIST_FILE = Resources/TinyGrab/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + OTHER_LDFLAGS = ( + "-undefined", + suppress, + "-undefined", + dynamic_lookup, + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; 2AD9EFAF12FEE24000FD7560 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2098,7 +2272,7 @@ "MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5; ONLY_ACTIVE_ARCH = YES; PREBINDING = NO; - SDKROOT = macosx10.6; + SDKROOT = macosx10.5; VALID_ARCHS = "ppc i386 x86_64"; }; name = Debug; @@ -2118,7 +2292,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.4; "MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5; PREBINDING = NO; - SDKROOT = macosx10.6; + SDKROOT = macosx10.5; VALID_ARCHS = "ppc i386 x86_64"; }; name = Release; @@ -2189,6 +2363,14 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 2ACA5CD1160E763A00F294C2 /* Build configuration list for PBXNativeTarget "TinyGrab" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2ACA5CD2160E763A00F294C2 /* Debug */, + 2ACA5CD3160E763A00F294C2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; 2AD9EFAE12FEE24000FD7560 /* Build configuration list for PBXAggregateTarget "Build Directory" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMPreferences.h b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMPreferences.h index 4c7bd1f..f6ba5b1 100644 --- a/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMPreferences.h +++ b/Frameworks/MGMUsers.framework/Versions/A/Headers/MGMPreferences.h @@ -10,7 +10,11 @@ @class MGMPreferencesPane; -@interface MGMPreferences : NSObject { +@interface MGMPreferences : NSObject +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060) + +#endif +{ @private NSWindow *preferencesWindow; NSMutableArray *preferencesPanes; diff --git a/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTaskView.nib b/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTaskView.nib new file mode 100644 index 0000000000000000000000000000000000000000..ef2ccee20ac3e433d901511fa75080dd68b297e5 GIT binary patch literal 6853 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 literal 0 HcmV?d00001 diff --git a/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTasksWindow.nib b/Frameworks/MGMUsers.framework/Versions/A/Resources/MGMTasksWindow.nib new file mode 100644 index 0000000000000000000000000000000000000000..c2c6ac5aebba3d4f87fcd4995ecce8b6469b4791 GIT binary patch literal 7017 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 literal 0 HcmV?d00001 diff --git a/Frameworks/MGMUsers.framework/Versions/A/Resources/TaskRestart.png b/Frameworks/MGMUsers.framework/Versions/A/Resources/TaskRestart.png new file mode 100644 index 0000000000000000000000000000000000000000..f3063a03e85c48f634411e26527fcde23a1df81f GIT binary patch literal 558 zcmV+}0@3}6P)G+C~M@#+8Byx@s9Mf(B$D2wPYv;~Qt*?LT*z*FYY)?;XxP z|GEG9&vA5EnC~7Z3)cyZ(V%Qs0V?hYn|SxZE$y$i(_PyMw~F`i{svucfTF@_1{ZI_ z+DnkD3ROb(%Dt#RG)%!h5!B`HQSyCw1sWEW%`L-;ld!d^SbCg-8(lc>{e#cVbr%t|7d*cT+h1WftKyjPu_vQv-56;6u4w*&Pj_0c?o{FZ z9Q^nKi9(hu9g--7^>iShz4TL6SDvWyZ#cUQ?`}hV&j7?WEVss(7qA>FS$(5dSrawA zXw~1&N*IAkN=|glEG~@w4mT6YtRcX@*qB+&UW~4zlB@V_1JBS^zF5{={g zdMp}6ntaysjm7Fy;++?RRO7HMvfF$CioO)b(rjV!Z(I|l*0Y*`k8OJ*Fb8+8TwAt= wZtD^!4OOy#E0+T!xO2&EOlBsY`+v#*0*JJwnQ__d&Hw-a07*qoM6N<$f^PlxT>t<8 literal 0 HcmV?d00001 diff --git a/Frameworks/MGMUsers.framework/Versions/A/Resources/TaskRestartPressed.png b/Frameworks/MGMUsers.framework/Versions/A/Resources/TaskRestartPressed.png new file mode 100644 index 0000000000000000000000000000000000000000..c686b413ffab75cb6a1a8ad8d30a977847c2abbb GIT binary patch literal 588 zcmV-S0<-;zP)f=s=H?<2HHoIpcxE#)S))lZ_xGDuWwcNfeY386UwhKE`==cXe5(dqx^BR8d`Z?!D)p zK7v9tua&PRsl5>!TTjNQ@kwj6f|4{nC6DTj(UU1$ribTi!REieO%*~KMv zTW?{Ng%?QM_wC)4t>{ixkQucFi{d3i%U1pXm#(M zc`Bqgj_iGms$JZoV5;~SI$h-HpPAv~=dJvWo<6n+1KpRab1CP44Q8|*h9yDkxQ zSs*Tv^T#HwD-)x}N(|B)w09j4jv}!CqTvn^{277ratyJ|nSAD##a$+PQ>Y}d*%Lde zQvRT{k5=lGWDGyIFjGAXrCrr1Uj!e%xQe-zwG2ZnbCj>8X`CF07(5 ze>7V>^Nw!}Vws~iPWvNca7DC)N%t3$-XD~XEg(F183z`ZVTOHlcVA+(_YvYbnilQA zlg*59!2lKh7K&30vH{(cro+I;CfzfUAa_sEa#N)_6X}WTRJ7c`M0O~eoRag7LU5-4 aP5u|--0kjg@1!aK0000Dr2p37Ua64fNjVocMv630I&XJiIp+y(YyYJq2&wF#v+<>rZ zVT4gY0z&T52fP7H0L#q@0dJGdW)sO|G8K=K%d&>8R_i*QP9M=TX1-J^ zouX24u@4_!!xH7^#bU9&cDsF3E|>57{r)FCW9HEUd-sgJM@d9WQcx7dNTbns@=oa) zGtYB>9(#$z5QT6Y=e=I9@A?ZEGtYB>o*WVdsy7~w9}9)TIeI%lj~nzU7)4qv7QgEI zFUU|esz)LGs!pfV5fwH~Q_JV`Cm<;y+XR+9FC%vu3I2dv tVB&9@6R{0=Gm7nst&E(X$f|!2`44Yu*OT}cRY(8;002ovPDHLkV1im;&p`kH literal 0 HcmV?d00001 diff --git a/Frameworks/MGMUsers.framework/Versions/A/Resources/TaskRevealPressed.png b/Frameworks/MGMUsers.framework/Versions/A/Resources/TaskRevealPressed.png new file mode 100644 index 0000000000000000000000000000000000000000..762cb8047ce9df16f93a6a031742c9b5b7c9fec6 GIT binary patch literal 485 zcmVJ|aw*MOHdPG&_HXKR^Um zZrm#PFZ>-opjK&6kc(>37)-(BsH;No1${^6!W~)!9r*4!-?{g@=RS^4@R|&o02DxS zrzY_4fC-G;oZw>tyb7EGVJ^pqQ;-K>KuIPfk zt}WnifWbBfI^GpTmzhi^*6ns*%H{I4D2gjx*OTdVdZ*Lrup`p?1HkrUpgV=BQmfT^ zs?}=G-~#jceEtNKuS!=*Y+;~>5a@W#X7i0=X2dDaIOi1-ZYJnXg+d|5O$x**&*$7& zqBCCr{!}UzpgSpw;u{W!-=$LN2s}QY&ll}>+nUX0Yi@%T3FE*%Jpes~VHn57Vo{f6 zd5=WP<#L_PX2bn{-{Hic^c^~&0lzE~i3IBP`k5q2LC0~vs@3ZKcs!;rxuuE}90I$5 z$EX7Sa-?aR6bglcrfE(s%lg2gJ5K{35%4HoLX}lj74gS5Qkw=~LR#{#mUH*sbP+Yg bpH2P)J$sepWQQ0=00000NkvXXu0mjf;|kE5 literal 0 HcmV?d00001 diff --git a/Frameworks/MGMUsers.framework/Versions/A/Resources/TaskStop.png b/Frameworks/MGMUsers.framework/Versions/A/Resources/TaskStop.png new file mode 100644 index 0000000000000000000000000000000000000000..30a1cecd019e33b73d2a3386394daf115405e182 GIT binary patch literal 334 zcmV-U0kQsxP)NPO){BKZ}#N6q@sFB0m%(VFyZE z*_00)#F15-+;>%Xjh#{6U&KD6VVD*qCNwP7G zIU0MW$@{`hL}XYXzC5@6!cQp9Tr|bYbYK|-!2%&o(`^`r>(^#JxpBw8jLTAH-YqlB zMkWL@OLHGtIrD#UDD6x{@KL=gjo2>5!K?wYx6Gx=k;mVOqje5Fh)CzqAyvk`_9AOJ g%V>f8_D@az1aLEUSaEaB8vp7r4WBle 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 I{Fw0n0a69FbN~PV diff --git a/PlugIns/TinyGrab.bundle/Contents/Resources/English.lproj/TinyGrabAccountPane.nib b/PlugIns/TinyGrab.bundle/Contents/Resources/English.lproj/TinyGrabAccountPane.nib deleted file mode 100644 index 28737d7f6d8d81176ac34402ce5bcfb0521345e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6882 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 B_!s~H diff --git a/PlugIns/TinyGrab.bundle/Contents/Resources/pt_PT.lproj/TinyGrabAccountPane.nib b/PlugIns/TinyGrab.bundle/Contents/Resources/pt_PT.lproj/TinyGrabAccountPane.nib deleted file mode 100644 index 1a7e7b032593414366e1b34e9bd5d92c99b1dd3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6911 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 Wv@;%i0@cqw_@evF&*t}(%l{8zq4=Tz diff --git a/PlugIns/TinyGrab.bundle/Contents/Resources/sv.lproj/TinyGrabAccountPane.nib b/PlugIns/TinyGrab.bundle/Contents/Resources/sv.lproj/TinyGrabAccountPane.nib deleted file mode 100644 index c1f38492dbc46d98218bbbeda7bb3fd99db1e2a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6989 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 diff --git a/Resources/TinyGrab/English.lproj/TinyGrabAccountPane.xib b/Resources/TinyGrab/English.lproj/TinyGrabAccountPane.xib new file mode 100644 index 0000000..ec3badc --- /dev/null +++ b/Resources/TinyGrab/English.lproj/TinyGrabAccountPane.xib @@ -0,0 +1,718 @@ + + + + 1050 + 10J567 + 823 + 1038.35 + 462.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 823 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + MGMTinyGrabPlugIn + + + FirstResponder + + + NSApplication + + + + 268 + + YES + + + 256 + + YES + + YES + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + + {{220, 3}, {100, 100}} + + YES + + 130560 + 33554432 + + NSImage + tinygrab + + 0 + 0 + 0 + YES + + YES + + + + 268 + {{14, 12}, {92, 32}} + + YES + + 67239424 + 134217728 + Register + + LucidaGrande + 13 + 1044 + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{87, 78}, {123, 17}} + + YES + + 68288064 + 272630784 + Unknown + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2ODY1AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{17, 78}, {68, 17}} + + YES + + 68288064 + 71304192 + Type: + + + + + + + + + 268 + {{106, 12}, {107, 32}} + + YES + + 67239424 + 134217728 + Login + + + -2038284033 + 129 + + DQ + 200 + 25 + + + + + 268 + {{90, 101}, {222, 22}} + + YES + + 343014976 + 272630784 + + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + YES + NSAllRomanInputSourcesLocaleIdentifier + + + + + + 268 + {{90, 126}, {222, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + + + + + + 268 + {{17, 103}, {68, 17}} + + YES + + 68288064 + 71304192 + Password: + + + + + + + + + 268 + {{17, 128}, {68, 17}} + + YES + + 68288064 + 71304192 + Email: + + + + + + + + {332, 168} + + NSView + + + + + YES + + + nextKeyView + + + + 12 + + + + emailField + + + + 13 + + + + passwordField + + + + 14 + + + + view + + + + 15 + + + + loginButton + + + + 16 + + + + login: + + + + 17 + + + + registerAccount: + + + + 24 + + + + typeField + + + + 25 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + YES + + + + + + + + + + + + + + 2 + + + YES + + + + + + 3 + + + YES + + + + + + 4 + + + YES + + + + + + 5 + + + YES + + + + + + 6 + + + YES + + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 18 + + + YES + + + + + + 19 + + + + + 20 + + + YES + + + + + + 21 + + + + + 22 + + + YES + + + + + + 23 + + + + + 26 + + + YES + + + + + + 27 + + + + + + + YES + + YES + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 1.WindowOrigin + 1.editorWindowContentRectSynchronizationRect + 10.IBPluginDependency + 11.IBPluginDependency + 18.IBPluginDependency + 18.IBViewBoundsToFrameTransform + 19.IBPluginDependency + 2.IBPluginDependency + 2.IBViewBoundsToFrameTransform + 20.IBPluginDependency + 20.IBViewBoundsToFrameTransform + 21.IBPluginDependency + 22.IBPluginDependency + 22.IBViewBoundsToFrameTransform + 23.IBPluginDependency + 26.IBViewBoundsToFrameTransform + 3.IBPluginDependency + 3.IBViewBoundsToFrameTransform + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 5.IBPluginDependency + 5.IBViewBoundsToFrameTransform + 6.IBPluginDependency + 6.IBViewBoundsToFrameTransform + 7.IBPluginDependency + 8.IBPluginDependency + 9.IBPluginDependency + + + YES + {{322, 588}, {332, 168}} + com.apple.InterfaceBuilder.CocoaPlugin + {628, 654} + {{217, 442}, {480, 272}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwnwAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwuIAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCrgAAwnwAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABC7gAAwigAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + AUMDAABDMAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwrAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCtAAAwugAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCtAAAwrYAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCtgAAwigAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 27 + + + + YES + + MGMTinyGrabPlugIn + NSObject + + YES + + YES + login: + registerAccount: + + + YES + id + id + + + + YES + + YES + login: + registerAccount: + + + YES + + login: + id + + + registerAccount: + id + + + + + YES + + YES + emailField + loginButton + passwordField + typeField + view + + + YES + NSTextField + NSButton + NSTextField + NSTextField + NSView + + + + YES + + YES + emailField + loginButton + passwordField + typeField + view + + + YES + + emailField + NSTextField + + + loginButton + NSButton + + + passwordField + NSTextField + + + typeField + NSTextField + + + view + NSView + + + + + IBProjectSource + Classes/MGMTinyGrabPlugIn.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../../TinyGrabPlugIn.xcodeproj + 3 + + tinygrab + {100, 100} + + + diff --git a/PlugIns/TinyGrab.bundle/Contents/Info.plist b/Resources/TinyGrab/Info.plist similarity index 58% rename from PlugIns/TinyGrab.bundle/Contents/Info.plist rename to Resources/TinyGrab/Info.plist index a60301a..8625f2a 100644 --- a/PlugIns/TinyGrab.bundle/Contents/Info.plist +++ b/Resources/TinyGrab/Info.plist @@ -2,14 +2,12 @@ - BuildMachineOSBuild - 10J567 CFBundleDevelopmentRegion English CFBundleExecutable - TinyGrab + ${EXECUTABLE_NAME} CFBundleIdentifier - com.TinyGrab.TinyGrab + com.TinyGrab.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType @@ -20,20 +18,6 @@ ???? CFBundleVersion 0.1 - DTCompiler - 4.2 - DTPlatformBuild - 4A278b - DTPlatformVersion - GM - DTSDKBuild - 4A278b - DTSDKName - macosx10.6 - DTXcode - 0400 - DTXcodeBuild - 4A278b NSPrincipalClass MGMTinyGrabPlugIn diff --git a/Resources/TinyGrab/pt_PT.lproj/TinyGrabAccountPane.xib b/Resources/TinyGrab/pt_PT.lproj/TinyGrabAccountPane.xib new file mode 100644 index 0000000..304f50c --- /dev/null +++ b/Resources/TinyGrab/pt_PT.lproj/TinyGrabAccountPane.xib @@ -0,0 +1,718 @@ + + + + 1050 + 10J567 + 823 + 1038.35 + 462.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 823 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + MGMTinyGrabPlugIn + + + FirstResponder + + + NSApplication + + + + 268 + + YES + + + 256 + + YES + + YES + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + + {{220, 12}, {100, 100}} + + YES + + 130560 + 33554432 + + NSImage + tinygrab + + 0 + 0 + 0 + YES + + YES + + + + 268 + {{14, 12}, {92, 32}} + + YES + + 67239424 + 134217728 + Registar + + LucidaGrande + 13 + 1044 + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{87, 87}, {123, 17}} + + YES + + 68288064 + 272630784 + Desconhecido + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2ODY1AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{17, 87}, {68, 17}} + + YES + + 68288064 + 71304192 + Tipo: + + + + + + + + + 268 + {{106, 12}, {138, 32}} + + YES + + 67239424 + 134217728 + Iniciar Sessão + + + -2038284033 + 129 + + DQ + 200 + 25 + + + + + 268 + {{90, 110}, {222, 22}} + + YES + + 343014976 + 272630784 + + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + YES + NSAllRomanInputSourcesLocaleIdentifier + + + + + + 268 + {{90, 135}, {222, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + + + + + + 268 + {{17, 112}, {68, 17}} + + YES + + 68288064 + 71304192 + Password: + + + + + + + + + 268 + {{17, 137}, {68, 17}} + + YES + + 68288064 + 71304192 + Email: + + + + + + + + {332, 177} + + NSView + + + + + YES + + + nextKeyView + + + + 12 + + + + emailField + + + + 13 + + + + passwordField + + + + 14 + + + + view + + + + 15 + + + + loginButton + + + + 16 + + + + login: + + + + 17 + + + + registerAccount: + + + + 24 + + + + typeField + + + + 25 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + YES + + + + + + + + + + + + + + 2 + + + YES + + + + + + 3 + + + YES + + + + + + 4 + + + YES + + + + + + 5 + + + YES + + + + + + 6 + + + YES + + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 18 + + + YES + + + + + + 19 + + + + + 20 + + + YES + + + + + + 21 + + + + + 22 + + + YES + + + + + + 23 + + + + + 26 + + + YES + + + + + + 27 + + + + + + + YES + + YES + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 1.WindowOrigin + 1.editorWindowContentRectSynchronizationRect + 10.IBPluginDependency + 11.IBPluginDependency + 18.IBPluginDependency + 18.IBViewBoundsToFrameTransform + 19.IBPluginDependency + 2.IBPluginDependency + 2.IBViewBoundsToFrameTransform + 20.IBPluginDependency + 20.IBViewBoundsToFrameTransform + 21.IBPluginDependency + 22.IBPluginDependency + 22.IBViewBoundsToFrameTransform + 23.IBPluginDependency + 26.IBViewBoundsToFrameTransform + 3.IBPluginDependency + 3.IBViewBoundsToFrameTransform + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 5.IBPluginDependency + 5.IBViewBoundsToFrameTransform + 6.IBPluginDependency + 6.IBViewBoundsToFrameTransform + 7.IBPluginDependency + 8.IBPluginDependency + 9.IBPluginDependency + + + YES + {{322, 579}, {332, 177}} + com.apple.InterfaceBuilder.CocoaPlugin + {628, 654} + {{217, 442}, {480, 272}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwnwAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwuIAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCrgAAwnwAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABC7gAAwigAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + AUMDAABDMAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwrAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCtAAAwugAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCtAAAwrYAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCtgAAwigAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 27 + + + + YES + + MGMTinyGrabPlugIn + NSObject + + YES + + YES + login: + registerAccount: + + + YES + id + id + + + + YES + + YES + login: + registerAccount: + + + YES + + login: + id + + + registerAccount: + id + + + + + YES + + YES + emailField + loginButton + passwordField + typeField + view + + + YES + NSTextField + NSButton + NSTextField + NSTextField + NSView + + + + YES + + YES + emailField + loginButton + passwordField + typeField + view + + + YES + + emailField + NSTextField + + + loginButton + NSButton + + + passwordField + NSTextField + + + typeField + NSTextField + + + view + NSView + + + + + IBProjectSource + Classes/MGMTinyGrabPlugIn.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../../TinyGrabPlugIn.xcodeproj + 3 + + tinygrab + {100, 100} + + + diff --git a/Resources/TinyGrab/sv.lproj/TinyGrabAccountPane.xib b/Resources/TinyGrab/sv.lproj/TinyGrabAccountPane.xib new file mode 100644 index 0000000..95060e0 --- /dev/null +++ b/Resources/TinyGrab/sv.lproj/TinyGrabAccountPane.xib @@ -0,0 +1,719 @@ + + + + 1050 + 10J567 + 1294 + 1038.35 + 462.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 1294 + + + YES + NSTextFieldCell + NSCustomView + NSCustomObject + NSButton + NSSecureTextField + NSTextField + NSSecureTextFieldCell + NSImageView + NSImageCell + NSButtonCell + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + + + YES + + MGMTinyGrabPlugIn + + + FirstResponder + + + NSApplication + + + + 268 + + YES + + + 256 + + YES + + YES + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + + {{220, 3}, {100, 100}} + + + + YES + + 130560 + 33554432 + + NSImage + tinygrab + + 0 + 0 + 0 + YES + + YES + + + + 268 + {{14, 12}, {104, 32}} + + + + YES + + 67239424 + 134217728 + Registrera + + LucidaGrande + 13 + 1044 + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{87, 78}, {123, 17}} + + + + YES + + 68288064 + 272630784 + Okänd + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2ODY1AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{17, 78}, {68, 17}} + + + + YES + + 68288064 + 71304192 + Typ: + + + + + + + + + 268 + {{118, 12}, {108, 32}} + + + + YES + + 67239424 + 134217728 + Inloggning + + + -2038284033 + 129 + + DQ + 200 + 25 + + + + + 268 + {{90, 101}, {222, 22}} + + + + YES + + 343014976 + 272630784 + + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + YES + NSAllRomanInputSourcesLocaleIdentifier + + + + + + 268 + {{90, 126}, {222, 22}} + + + + YES + + -1804468671 + 272630784 + + + + YES + + + + + + + 268 + {{17, 103}, {68, 17}} + + + + YES + + 68288064 + 71304192 + Lösenord: + + + + + + + + + 268 + {{17, 128}, {68, 17}} + + + + YES + + 68288064 + 71304192 + Epost: + + + + + + + + {332, 168} + + + + NSView + + + + + YES + + + nextKeyView + + + + 12 + + + + emailField + + + + 13 + + + + passwordField + + + + 14 + + + + view + + + + 15 + + + + loginButton + + + + 16 + + + + login: + + + + 17 + + + + registerAccount: + + + + 24 + + + + typeField + + + + 25 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + YES + + + + + + + + + + + + + + 2 + + + YES + + + + + + 3 + + + YES + + + + + + 4 + + + YES + + + + + + 5 + + + YES + + + + + + 6 + + + YES + + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 18 + + + YES + + + + + + 19 + + + + + 20 + + + YES + + + + + + 21 + + + + + 22 + + + YES + + + + + + 23 + + + + + 26 + + + YES + + + + + + 27 + + + + + + + YES + + YES + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 1.WindowOrigin + 1.editorWindowContentRectSynchronizationRect + 10.IBPluginDependency + 11.IBPluginDependency + 18.IBPluginDependency + 18.IBViewBoundsToFrameTransform + 19.IBPluginDependency + 2.IBPluginDependency + 2.IBViewBoundsToFrameTransform + 20.IBPluginDependency + 20.IBViewBoundsToFrameTransform + 21.IBPluginDependency + 22.IBPluginDependency + 22.IBViewBoundsToFrameTransform + 23.IBPluginDependency + 26.IBViewBoundsToFrameTransform + 3.IBPluginDependency + 3.IBViewBoundsToFrameTransform + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 5.IBPluginDependency + 5.IBViewBoundsToFrameTransform + 6.IBPluginDependency + 6.IBViewBoundsToFrameTransform + 7.IBPluginDependency + 8.IBPluginDependency + 9.IBPluginDependency + + + YES + {{322, 588}, {332, 168}} + com.apple.InterfaceBuilder.CocoaPlugin + {628, 654} + {{217, 442}, {480, 272}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwnwAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwuIAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCrgAAwnwAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABC7gAAwigAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + AUMDAABDMAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwrAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCtAAAwugAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCtAAAwrYAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCtgAAwigAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 27 + + + + YES + + MGMTinyGrabPlugIn + NSObject + + registerAccount: + id + + + registerAccount: + + registerAccount: + id + + + + YES + + YES + emailField + loginButton + passwordField + typeField + view + + + YES + NSTextField + NSButton + NSTextField + NSTextField + NSView + + + + YES + + YES + emailField + loginButton + passwordField + typeField + view + + + YES + + emailField + NSTextField + + + loginButton + NSButton + + + passwordField + NSTextField + + + typeField + NSTextField + + + view + NSView + + + + + IBProjectSource + ./Classes/MGMTinyGrabPlugIn.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + tinygrab + {100, 100} + + + diff --git a/PlugIns/TinyGrab.bundle/Contents/Resources/tinygrab.png b/Resources/TinyGrab/tinygrab.png similarity index 100% rename from PlugIns/TinyGrab.bundle/Contents/Resources/tinygrab.png rename to Resources/TinyGrab/tinygrab.png diff --git a/index.php b/index.php index fd1969e..f7ddb8a 100644 --- a/index.php +++ b/index.php @@ -8,7 +8,7 @@ // $_CS = array(); -$_CS['version'] = "0.1"; +$_CS['version'] = "0.2"; $_CS['time'] = time(); // You are expected to understand a little PHP to use this file. @@ -36,7 +36,7 @@ exit(); // End of MD5 code. */ -$_CS['domain'] = $_SERVER['SERVER_NAME']; +$_CS['domain'] = $_SERVER['HTTP_HOST']; $_CS['port'] = $_SERVER['SERVER_PORT']; $_CS['ssl'] = ($_SERVER['HTTPS']=="on");