Skip to content
Browse files

Fixed image switching synchronization problems. Drank beer. It was good.

git-svn-id: http://svn.hunch.se/photo-feeder/trunk@150 98834e0e-571d-0410-bf09-ac0e1acfc769
  • Loading branch information...
1 parent b86665a commit 4433f42092de331333b7fb699a6ed947d33caa0f rasmus committed Jan 24, 2007
View
2 Core/AIPlasticButton/AIPlasticButtonCell.m
@@ -182,7 +182,7 @@ - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
fraction:1.0];
//Draw Label
-#warning XXX handle NSCellImagePosition values other than these two correctly
+//#warning XXX handle NSCellImagePosition values other than these two correctly
if(imagePosition != NSImageOnly) {
NSString *title = [self title];
if (title) {
View
5 Core/PFMain.m
@@ -325,7 +325,7 @@ - (void) instantiateProviders
NSObject<PFProvider>* provider;
if(!identifier)
- identifier = [PFUtil generateUniqueIdentifierForInstanceOfClass:providerClass];
+ identifier = [PFUtil generateUID];
if(!configuration)
configuration = [PFUtil configurationForProviderWithIdentifier:identifier];
@@ -451,6 +451,9 @@ - (void) queueFillerThread:(id)obj
// If we have an available provider, let's use it
if(provider)
{
+ // TEST
+ //[PFUtil randomSleep:0 maxSeconds:5];
+
// Put this procider in the "busy" stack
@synchronized(busyProviders)
{
View
5 Core/PFUtil.h
@@ -24,12 +24,11 @@
/// Cause the current thread to sleep for random number of seconds
+ (void) randomSleep:(unsigned)min maxSeconds:(unsigned)max;
-/// Generates a per-process unique identifier based on class
-+ (NSString*) generateUniqueIdentifierForInstanceOfClass:(Class)cls;
+/// Generates a globally unique identifier, valid between processes
++ (NSString*) generateUID;
+ (NSMutableDictionary*) configurationForProvider:(NSObject<PFProvider>*)provider;
+ (NSMutableDictionary*) configurationForProviderWithIdentifier:(NSString*)providerId;
-+ (void) setConfiguration:(NSDictionary*)conf forProvider:(NSObject<PFProvider>*)provider;
/// Screeen saver defaults for PhotoFeeder
+ (NSUserDefaults*) defaults;
View
41 Core/PFUtil.m
@@ -12,13 +12,11 @@
#import "PFUtil.h"
#import <ScreenSaver/ScreenSaverDefaults.h>
+#import <ScreenSaver/ScreenSaverView.h>
@implementation PFUtil
-static NSMutableDictionary* uniqueIdentifiersDictKeyedByClass = nil;
-
-
+ (unsigned long) microseed
{
struct timeval tp;
@@ -40,10 +38,10 @@ + (double) microtime
+ (void) randomSleep:(unsigned)min maxSeconds:(unsigned)max
{
srandom([PFUtil microseed]);
- unsigned long s = (random() % (max-min)) + min;
- if(!s)
+ float s = SSRandomFloatBetween(min, max);
+ if(!s) // if 0, no need to sleep
return;
- DLog(@"Sleeping for %lu seconds...", s);
+ //DLog(@"Sleeping for %f seconds...", s);
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:s]];
}
@@ -55,23 +53,18 @@ + (NSString*) providerIdFromProvider:(NSObject<PFProvider>*)provider
}
-+ (NSString*) generateUniqueIdentifierForInstanceOfClass:(Class)cls
++ (NSString*) generateUID
{
- if(!uniqueIdentifiersDictKeyedByClass)
- uniqueIdentifiersDictKeyedByClass = [[NSMutableDictionary alloc] init];
-
- NSString* className = NSStringFromClass(cls);
- NSNumber* nextNumObj;
- int nextNum = 0;
+ struct timeval tp;
- @synchronized(uniqueIdentifiersDictKeyedByClass)
+ if(gettimeofday(&tp, NULL) == 0)
{
- if(nextNumObj = [uniqueIdentifiersDictKeyedByClass objectForKey:className])
- nextNum = [nextNumObj intValue];
- [uniqueIdentifiersDictKeyedByClass setObject:[[NSNumber alloc] initWithInt:nextNum+1] forKey:className];
+ srandom(tp.tv_sec);
+ return [NSString stringWithFormat:@"%x-%x-%x",
+ tp.tv_usec, tp.tv_sec, SSRandomIntBetween(100, LONG_MAX)];
}
- return [NSString stringWithFormat:@"%@#%d", className, nextNum];
+ return nil;
}
@@ -167,20 +160,20 @@ + (NSDictionary*) appDefaults
[NSDictionary dictionaryWithObjectsAndKeys:
@"PFDiskProvider", @"class",
[NSDictionary dictionaryWithObjectsAndKeys:
- [NSNumber numberWithBool:YES], @"active",
- @"Images in ~/Pictures/_temp", @"name",
- @"~/Pictures/_temp", @"path",
+ [NSNumber numberWithBool:YES], @"active",
+ @"Images in my Pictures folder", @"name",
+ @"~/Pictures", @"path",
nil],
@"configuration",
nil],
- @"PFDiskProvider#-1",
+ @"787f7-45b684e7-4e413064",
nil];
// Application defaults
appDefaults = [[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:60], @"fps",
- [NSNumber numberWithFloat:3.0], @"displayInterval",
- [NSNumber numberWithFloat:1.0], @"fadeInterval",
+ [NSNumber numberWithFloat:5.0], @"displayInterval",
+ [NSNumber numberWithFloat:3.0], @"fadeInterval",
defaultActiveProviders, @"activeProviders",
nil] retain];
}
View
8 Core/PFView.h
@@ -16,6 +16,8 @@
{
QCView* qcView; // The quartz composition
BOOL switchImageThreadsAreRunning;
+ BOOL hasResetTimer;
+ BOOL isFirstTime;
NSImage* sourceImage; // back
NSImage* destinationImage; // front
@@ -25,6 +27,12 @@
double userFadeInterval; // User-defined transition interval
double userDisplayInterval; // User-defined display interval -- how long the image is displayed, not counting transitions
double userFps;
+
+ // Update factors needed for image port switch synchronization
+ float imagePortMinSrc;
+ float imagePortMaxSrc;
+ float imagePortMinDst;
+ float imagePortMaxDst;
}
// Animation & Rendering
View
91 Core/PFView.m
@@ -37,6 +37,7 @@ - (id)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview
[qcView loadCompositionFromFile:[[[PFMain instance] bundle] pathForResource:@"standard" ofType:@"qtz"]];
[qcView setAutostartsRendering:NO];
[self addSubview: qcView];
+ [qcView setValue: [NSNumber numberWithDouble:1.0] forInputKey: @"statusMessageEnabled"];
}
return self;
}
@@ -60,12 +61,8 @@ - (void) startAnimation
DLog(@"");
[self renderingParametersDidChange];
-
[qcView setValue: @"Loading images..." forInputKey: @"statusMessageText"];
- // Reset image ports
- imagePortName = dstImageId;
-
// Fork threads on first call to startAnimation (pungsvett från räkan)
if(!switchImageThreadsAreRunning)
{
@@ -75,9 +72,11 @@ - (void) startAnimation
}
// Start animation timer and unlock "critical section"
+ hasResetTimer = NO;
+ isFirstTime = YES;
[super startAnimation];
[qcView startRendering];
- [qcView setValue:[NSNumber numberWithBool: TRUE] forInputKey:@"resetTime"];
+ [qcView setValue:[NSNumber numberWithBool: TRUE] forInputKey:@"startTime"];
[[PFMain instance] animationStartedByView:self];
}
@@ -99,6 +98,12 @@ - (void) renderingParametersDidChange
[qcView setValue: [NSNumber numberWithDouble:userDisplayInterval] forInputKey: @"timeVisible"];
[qcView setValue: [NSNumber numberWithDouble:userFadeInterval] forInputKey: @"timeFading"];
[qcView setMaxRenderingFrameRate: userFps];
+
+ // Update factors needed for image port switch synchronization
+ imagePortMinSrc = (userFadeInterval*2)+userDisplayInterval;
+ imagePortMaxSrc = (userFadeInterval+userDisplayInterval)*2;
+ imagePortMinDst = userFadeInterval;
+ imagePortMaxDst = userFadeInterval+userDisplayInterval;
}
@@ -126,7 +131,7 @@ - (void) switchImageDispatchThread:(id)obj
switchImageThreadsAreRunning = YES;
@try
{
- BOOL isFirstTime = YES;
+ isFirstTime = YES;
imagePortName = srcImageId;
double delay;
@@ -140,9 +145,7 @@ - (void) switchImageDispatchThread:(id)obj
// If we don't have an image yet, wait a short while before trying again.
if (delay == -1.0)
- {
delay = 1.0;
- }
else
isFirstTime = NO;
@@ -161,17 +164,47 @@ - (void) switchImageDispatchThread:(id)obj
#pragma mark Image switching
-- (double) switchImage:(BOOL)isFirstTime
+
+- (double) switchImage:(BOOL)isFirstTimee
{
- NSImage* image;
- double delay;
+ NSImage* image = nil;
+ double time, delay;
+ float imagePortMod;
+ int imagePortState;
+
+ image = [[[PFMain instance] queue] poll];
+ time = [[qcView valueForInputKey: @"time"] doubleValue];
+ imagePortMod = ceil(FMOD(time, (userDisplayInterval+userFadeInterval)*2));
+
+ if(imagePortMod >= imagePortMinSrc && imagePortMod <= imagePortMaxSrc)
+ {
+ imagePortName = srcImageId;
+ imagePortState = 1;
+ //DLog(@"------------------- SRC time: %.4f mod: %.4f src: %.1f - %.1f dst: %.1f - %.1f", time, imagePortMod,
+ // imagePortMinSrc, imagePortMaxSrc, imagePortMinDst, imagePortMaxDst);
+ }
+ else if(imagePortMod >= imagePortMinDst && imagePortMod <= imagePortMaxDst)
+ {
+ imagePortName = dstImageId;
+ imagePortState = 2;
+ //DLog(@"------------------- DST time: %.4f mod: %.4f src: %.1f - %.1f dst: %.1f - %.1f", time, imagePortMod,
+ // imagePortMinSrc, imagePortMaxSrc, imagePortMinDst, imagePortMaxDst);
+ }
+ else
+ {
+ // Error correction - if call is out of sync, this block is executed.
+ if(!isFirstTime)
+ imagePortName = (imagePortName == srcImageId) ? dstImageId : srcImageId;
+ imagePortState = 0;
+ //DLog(@"------------------- ? time: %.4f mod: %.4f src: %.1f - %.1f dst: %.1f - %.1f", time, imagePortMod,
+ // imagePortMinSrc, imagePortMaxSrc, imagePortMinDst, imagePortMaxDst);
+ }
- // Take the next image from the image queue
- image = (NSImage*)[[[PFMain instance] queue] poll];
// Check if queue is empty
if(!image)
{
+ //DLog(@"image = nil");
if(isFirstTime)
{
return -1.0;
@@ -183,35 +216,29 @@ - (double) switchImage:(BOOL)isFirstTime
DLog(@"Image queue is depleted");
}
}
- else
+ else if(imagePortState && !isFirstTime)
{
[qcView setValue: [NSNumber numberWithDouble:0.0] forInputKey: @"statusMessageEnabled"];
// Pass the image to QC, which will cause the bitmap data to be copied onto a
// texture. Takes some time...
[qcView setValue:image forInputKey:imagePortName];
[image release];
+
+ // First time, we know the exact delay:
+ if(!hasResetTimer)
+ {
+ [qcView setValue:[NSNumber numberWithBool: TRUE] forInputKey:@"resetTime"];
+ delay = userFadeInterval;
+ hasResetTimer = YES;
+ }
}
- // First time, we know the exact delay:
- if(isFirstTime)
- {
- [qcView setValue:[NSNumber numberWithBool: TRUE] forInputKey:@"startTime"];
- delay = userFadeInterval;
- }
- // Following calls, we sync the delay with the rendering cycle,
- // getting "time" from the qc-composition:
- else
- {
- double time = [[qcView valueForInputKey: @"time"] doubleValue];
- double userDisplayAndFadeInterval = userDisplayInterval + userFadeInterval;
- delay = (userDisplayAndFadeInterval - (time - (floor(time / userDisplayAndFadeInterval) * userDisplayAndFadeInterval))) + userFadeInterval;
- }
-
- // Switch image ports. Needs to be done every time this method is run.
- imagePortName = (imagePortName == srcImageId) ? dstImageId : srcImageId;
+ //time = [[qcView valueForInputKey: @"time"] doubleValue]; // we don't need the exakthet säger räkans med pungsvett
+ double userDisplayAndFadeInterval = userDisplayInterval + userFadeInterval;
+ delay = (userDisplayAndFadeInterval - (time - (floor(time / userDisplayAndFadeInterval) * userDisplayAndFadeInterval))) + userFadeInterval;
- DLog(@"Next switch will operate on '%@' in %f seconds", imagePortName, delay);
+ DLog(@"Next switch will operate in %f seconds", imagePortName, delay);
return delay;
}
View
3 Core/prefix.pch
@@ -24,6 +24,9 @@
// S-formed curve from 0-1
#define SMOOTHSTEP(x) ((x)*(x)*(3-2*(x)))
+// Modulus float
+#define FMOD(x,y) ((x)-(floor((x)/(y))*(y)))
+
// Exception throwing shorthand:
// void throw_ex(NSString* type, NSString* message)
//
View
2 PhotoFeeder.xcodeproj/project.pbxproj
@@ -217,7 +217,7 @@
3A848C620B3B720B00B65C13 /* Viewer_main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Viewer_main.m; sourceTree = "<group>"; };
3A848C630B3B720B00B65C13 /* ViewerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewerController.h; sourceTree = "<group>"; };
3A848C640B3B720B00B65C13 /* ViewerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewerController.m; sourceTree = "<group>"; };
- 3A8F91600AE571820027DC3B /* Viewer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Viewer.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3A8F91600AE571820027DC3B /* Viewer.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Viewer.app; sourceTree = BUILT_PRODUCTS_DIR; };
3A94047D0B59A133001FBD1C /* NSArrayPFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSArrayPFAdditions.h; path = Core/NSArrayPFAdditions.h; sourceTree = "<group>"; };
3A94047E0B59A133001FBD1C /* NSArrayPFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSArrayPFAdditions.m; path = Core/NSArrayPFAdditions.m; sourceTree = "<group>"; };
3A9404C40B59A8D7001FBD1C /* PFUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PFUtil.h; path = Core/PFUtil.h; sourceTree = "<group>"; };
View
5,058 PhotoFeeder.xcodeproj/rasmus.pbxuser
4,807 additions, 251 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
153 PhotoFeeder.xcodeproj/rasmus.perspective
@@ -273,19 +273,23 @@
<string>3A216B6D0AEED38F0070394E</string>
<string>3AEF430B0AEA7C350062B848</string>
<string>3A216B6E0AEED3A70070394E</string>
+ <string>089C1671FE841209C02AAC07</string>
+ <string>1058C7ACFEA557BF11CA2CBB</string>
<string>19C28FB8FE9D52D311CA2CBB</string>
<string>1C37FBAC04509CD000000102</string>
+ <string>3AD90A4C0B66C745007E8710</string>
+ <string>3AD90A4D0B66C745007E8710</string>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
- <integer>31</integer>
- <integer>26</integer>
+ <integer>17</integer>
+ <integer>3</integer>
<integer>0</integer>
</array>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
- <string>{{0, 7}, {231, 928}}</string>
+ <string>{{0, 0}, {231, 928}}</string>
</dict>
<key>PBXTopSmartGroupGIDs</key>
<array/>
@@ -316,19 +320,19 @@
<key>PBXProjectModuleGUID</key>
<string>3A7DF6DA0B650983007D760E</string>
<key>PBXProjectModuleLabel</key>
- <string>PFMain.m</string>
+ <string>PFUtil.m</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>3A7DF6DB0B650983007D760E</string>
<key>PBXProjectModuleLabel</key>
- <string>PFMain.m</string>
+ <string>PFUtil.m</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>3AD909430B66B242007E8710</string>
+ <string>3AD90CE40B66F319007E8710</string>
<key>history</key>
<array>
<string>3ACC86780B65A11F00BE2F7D</string>
@@ -351,8 +355,6 @@
<string>3A8CCF0B0B6621C2003009F3</string>
<string>3AD906BB0B669255007E8710</string>
<string>3AD906BC0B669255007E8710</string>
- <string>3AD906F70B669769007E8710</string>
- <string>3AD907080B6697E4007E8710</string>
<string>3AD9071D0B669D42007E8710</string>
<string>3AD9076A0B669E05007E8710</string>
<string>3AD9076B0B669E05007E8710</string>
@@ -367,8 +369,18 @@
<string>3AD908AD0B66A9F7007E8710</string>
<string>3AD908AE0B66A9F7007E8710</string>
<string>3AD908CA0B66AAE6007E8710</string>
- <string>3AD908EB0B66AE87007E8710</string>
- <string>3AD908E50B66AC24007E8710</string>
+ <string>3AD909660B66BACB007E8710</string>
+ <string>3AD909670B66BACB007E8710</string>
+ <string>3AD909680B66BACB007E8710</string>
+ <string>3AD909690B66BACB007E8710</string>
+ <string>3AD9096B0B66BACB007E8710</string>
+ <string>3AD909810B66BB12007E8710</string>
+ <string>3AD909820B66BB12007E8710</string>
+ <string>3AD909830B66BB12007E8710</string>
+ </array>
+ <key>nextStack</key>
+ <array>
+ <string>3AD909840B66BB12007E8710</string>
</array>
<key>prevStack</key>
<array>
@@ -420,12 +432,9 @@
<string>3AD906BF0B669255007E8710</string>
<string>3AD906C00B669255007E8710</string>
<string>3AD906C10B669255007E8710</string>
- <string>3AD906FA0B66976A007E8710</string>
<string>3AD906FB0B66976A007E8710</string>
- <string>3AD906FC0B66976A007E8710</string>
<string>3AD906FD0B66976A007E8710</string>
<string>3ACC87850B65A29600BE2F7D</string>
- <string>3AD9070A0B6697E4007E8710</string>
<string>3AD907200B669D42007E8710</string>
<string>3AD907210B669D42007E8710</string>
<string>3AD907220B669D42007E8710</string>
@@ -445,6 +454,11 @@
<string>3AD908B20B66A9F7007E8710</string>
<string>3AD908B30B66A9F7007E8710</string>
<string>3AD908CC0B66AAE6007E8710</string>
+ <string>3AD909700B66BACB007E8710</string>
+ <string>3AD909710B66BACB007E8710</string>
+ <string>3AD909720B66BACB007E8710</string>
+ <string>3AD909740B66BACB007E8710</string>
+ <string>3AD909760B66BACB007E8710</string>
</array>
</dict>
<key>SplitCount</key>
@@ -458,16 +472,16 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{0, 0}, {1071, 786}}</string>
+ <string>{{0, 0}, {1071, 816}}</string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
- <string>786pt</string>
+ <string>816pt</string>
</dict>
<dict>
<key>Proportion</key>
- <string>155pt</string>
+ <string>125pt</string>
<key>Tabs</key>
<array>
<dict>
@@ -481,7 +495,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{10, 27}, {1071, 128}}</string>
+ <string>{{10, 27}, {1071, 98}}</string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@@ -580,8 +594,6 @@
<key>Layout</key>
<array>
<dict>
- <key>BecomeActive</key>
- <true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@@ -610,15 +622,17 @@
<string>089C166AFE841209C02AAC07</string>
<string>3A216B6D0AEED38F0070394E</string>
<string>3AEF430B0AEA7C350062B848</string>
+ <string>3A6C6AD10B5D931A00BD74E1</string>
<string>3A6C6A1F0B5D8CE900BD74E1</string>
+ <string>3ACE7A4D0B62E0F400BC66F9</string>
<string>3A216B6E0AEED3A70070394E</string>
<string>19C28FB8FE9D52D311CA2CBB</string>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
- <integer>38</integer>
- <integer>37</integer>
+ <integer>42</integer>
+ <integer>41</integer>
<integer>0</integer>
</array>
</array>
@@ -640,7 +654,7 @@
<real>241</real>
</array>
<key>RubberWindowFrame</key>
- <string>488 134 1324 1008 0 0 1920 1178 </string>
+ <string>487 158 1324 1008 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@@ -651,33 +665,32 @@
<key>Dock</key>
<array>
<dict>
+ <key>BecomeActive</key>
+ <true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>3A7DF6E10B650983007D760E</string>
<key>PBXProjectModuleLabel</key>
- <string>PFFlickrProvider.m</string>
+ <string>PFView.m</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>3A7DF6E20B650983007D760E</string>
<key>PBXProjectModuleLabel</key>
- <string>PFFlickrProvider.m</string>
+ <string>PFView.m</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>3AD909460B66B242007E8710</string>
+ <string>3AD90CE50B66F319007E8710</string>
<key>history</key>
<array>
- <string>3A77678B0B655369000828C7</string>
<string>3ACC86770B65A11F00BE2F7D</string>
<string>3ACC86780B65A11F00BE2F7D</string>
<string>3ACC867F0B65A11F00BE2F7D</string>
<string>3ACC86800B65A11F00BE2F7D</string>
- <string>3ACC87610B65A1C000BE2F7D</string>
- <string>3ACC87800B65A29600BE2F7D</string>
<string>3ACC87CC0B65A56200BE2F7D</string>
<string>3ACC87CD0B65A56200BE2F7D</string>
<string>3ACC87CE0B65A56200BE2F7D</string>
@@ -687,7 +700,6 @@
<string>3ACC87D20B65A56200BE2F7D</string>
<string>3ACC87D30B65A56200BE2F7D</string>
<string>3ACC88040B65A72E00BE2F7D</string>
- <string>3ACC88060B65A72E00BE2F7D</string>
<string>3ACC88070B65A72E00BE2F7D</string>
<string>3ACC88090B65A72E00BE2F7D</string>
<string>3ACC88200B65A73000BE2F7D</string>
@@ -700,19 +712,27 @@
<string>3AD9077B0B669E1F007E8710</string>
<string>3AD907A00B669EF3007E8710</string>
<string>3AD907DF0B66A44A007E8710</string>
- <string>3AD908B60B66A9F8007E8710</string>
- <string>3AD908E00B66AC24007E8710</string>
<string>3AD909010B66AFE2007E8710</string>
- <string>3AD909120B66B049007E8710</string>
- <string>3AD909240B66B0D6007E8710</string>
- <string>3AD909260B66B0D6007E8710</string>
<string>3AD909370B66B145007E8710</string>
- <string>3AD909440B66B242007E8710</string>
- <string>3AD909000B66AFE2007E8710</string>
+ <string>3AD909690B66BACB007E8710</string>
+ <string>3AD9096B0B66BACB007E8710</string>
+ <string>3AD9096D0B66BACB007E8710</string>
+ <string>3AD9098D0B66BB3E007E8710</string>
+ <string>3AD909DC0B66C06D007E8710</string>
+ <string>3AD909F10B66C109007E8710</string>
+ <string>3AD909F20B66C109007E8710</string>
+ <string>3AD90A530B66C75E007E8710</string>
+ <string>3AD90A670B66C916007E8710</string>
+ <string>3AD90B270B66DBEC007E8710</string>
+ <string>3AD90B300B66DC8F007E8710</string>
+ <string>3AD90BB50B66E36E007E8710</string>
+ <string>3AD90BB60B66E36E007E8710</string>
+ <string>3AD90C5B0B66E9DD007E8710</string>
+ <string>3AD90C880B66EC4B007E8710</string>
+ <string>3AD90C890B66EC4B007E8710</string>
</array>
<key>prevStack</key>
<array>
- <string>3A7767770B65535C000828C7</string>
<string>3A7767780B65535C000828C7</string>
<string>3A7767790B65535C000828C7</string>
<string>3ACC86830B65A11F00BE2F7D</string>
@@ -776,6 +796,49 @@
<string>3AD9092D0B66B0D6007E8710</string>
<string>3AD909390B66B145007E8710</string>
<string>3AD909450B66B242007E8710</string>
+ <string>3AD909510B66B5D7007E8710</string>
+ <string>3AD909520B66B5D7007E8710</string>
+ <string>3AD909530B66B5D7007E8710</string>
+ <string>3AD909720B66BACB007E8710</string>
+ <string>3AD909740B66BACB007E8710</string>
+ <string>3AD909760B66BACB007E8710</string>
+ <string>3AD909900B66BB3E007E8710</string>
+ <string>3AD909910B66BB3E007E8710</string>
+ <string>3AD909920B66BB3E007E8710</string>
+ <string>3AD9099B0B66BBF8007E8710</string>
+ <string>3AD909BE0B66BF92007E8710</string>
+ <string>3AD909BF0B66BF92007E8710</string>
+ <string>3AD909C00B66BF92007E8710</string>
+ <string>3AD909CB0B66BFE0007E8710</string>
+ <string>3AD909CC0B66BFE0007E8710</string>
+ <string>3AD909D30B66BFF0007E8710</string>
+ <string>3AD909DD0B66C06D007E8710</string>
+ <string>3AD909F40B66C109007E8710</string>
+ <string>3AD909F50B66C109007E8710</string>
+ <string>3AD909FC0B66C1C7007E8710</string>
+ <string>3AD90A0E0B66C36E007E8710</string>
+ <string>3AD90A0F0B66C36E007E8710</string>
+ <string>3AD90A210B66C3F9007E8710</string>
+ <string>3AD90A8A0B66CADC007E8710</string>
+ <string>3AD90AA70B66CE5F007E8710</string>
+ <string>3AD90AB20B66CE98007E8710</string>
+ <string>3AD90AE90B66D807007E8710</string>
+ <string>3AD90B2A0B66DBEC007E8710</string>
+ <string>3AD90B330B66DC8F007E8710</string>
+ <string>3AD90B340B66DC8F007E8710</string>
+ <string>3AD90B350B66DC8F007E8710</string>
+ <string>3AD90B5E0B66E034007E8710</string>
+ <string>3AD90B600B66E034007E8710</string>
+ <string>3AD90B620B66E034007E8710</string>
+ <string>3AD90B640B66E034007E8710</string>
+ <string>3AD90B660B66E034007E8710</string>
+ <string>3AD90B680B66E034007E8710</string>
+ <string>3AD90B7D0B66E168007E8710</string>
+ <string>3AD90B870B66E18A007E8710</string>
+ <string>3AD90BB90B66E36E007E8710</string>
+ <string>3AD90BBA0B66E36E007E8710</string>
+ <string>3AD90C8A0B66EC4B007E8710</string>
+ <string>3AD90C8B0B66EC4B007E8710</string>
</array>
</dict>
<key>SplitCount</key>
@@ -789,18 +852,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{0, 0}, {1061, 679}}</string>
+ <string>{{0, 0}, {1061, 550}}</string>
<key>RubberWindowFrame</key>
- <string>488 134 1324 1008 0 0 1920 1178 </string>
+ <string>487 158 1324 1008 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
- <string>679pt</string>
+ <string>550pt</string>
</dict>
<dict>
<key>Proportion</key>
- <string>262pt</string>
+ <string>391pt</string>
<key>Tabs</key>
<array>
<dict>
@@ -818,7 +881,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{10, 27}, {1061, 386}}</string>
+ <string>{{10, 27}, {1061, 364}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@@ -871,9 +934,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{10, 27}, {1061, 235}}</string>
+ <string>{{10, 27}, {1061, 364}}</string>
<key>RubberWindowFrame</key>
- <string>488 134 1324 1008 0 0 1920 1178 </string>
+ <string>487 158 1324 1008 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXRunSessionModule</string>
@@ -1083,7 +1146,7 @@
<string>/Users/rasmus/src/PhotoFeeder/PhotoFeeder.xcodeproj</string>
</array>
<key>WindowString</key>
- <string>488 134 1324 1008 0 0 1920 1178 </string>
+ <string>487 158 1324 1008 0 0 1920 1178 </string>
<key>WindowTools</key>
<array>
<dict>
View
10 Providers/Flickr/PFFlickrProvider.m
@@ -18,7 +18,7 @@ @implementation PFFlickrProvider
+ (NSString*) pluginName
{
- return @"Flickr: rsms favourites";
+ return @"Flickr";
}
@@ -144,7 +144,7 @@ -(NSImage*)nextImage
{
// Would be nice to handle "to small images" right here
NSURL* url = (NSURL *)[urls take];
- DLog(@"%@", url);
+ //DLog(@"%@", url);
return [[NSImage alloc] initWithContentsOfURL:url];
}
@@ -210,10 +210,10 @@ - (void)addURLs
size: @"Large"];
if(urlString) {
[urls put:[NSURL URLWithString:urlString]];
- DLog(@"Queued %@", urlString);
+ //DLog(@"Queued %@", urlString);
}
- else
- DLog(@"Image was too small");
+ //else
+ //DLog(@"Image was too small");
}
// Sure shots:
View
4 Providers/PFProvider.h
@@ -50,6 +50,10 @@
-(NSString*) name;
-(void) setName:(NSString*)name;
+/// Human-readable name, or type, of the plugin
+-(NSString*) pluginType;
+//-(void) setPluginType:(Class)cls;
+
/// Return an Image
-(NSImage*) nextImage;
View
6 Providers/PFProvider.m
@@ -121,6 +121,12 @@ -(void) setName:(NSString*)name
}
+-(NSString*) pluginType
+{
+ return [[self class] pluginName];
+}
+
+
-(NSImage*)nextImage
{
return nil;
View
BIN Renderers/standard.qtz
Binary file not shown.
View
BIN Screensaver/ConfigureSheet.nib/keyedobjects.nib
Binary file not shown.

0 comments on commit 4433f42

Please sign in to comment.
Something went wrong with that request. Please try again.