Revision: 3052
          http://skim-app.svn.sourceforge.net/skim-app/?rev=3052&view=rev
Author:   hofman
Date:     2007-10-21 04:22:17 -0700 (Sun, 21 Oct 2007)

Log Message:
-----------
Don't save path for bookmarks and recent documents. That is kept by the alias.

Modified Paths:
--------------
    trunk/SKBookmark.h
    trunk/SKBookmark.m
    trunk/SKBookmarkController.m

Modified: trunk/SKBookmark.h
===================================================================
--- trunk/SKBookmark.h  2007-10-20 18:06:46 UTC (rev 3051)
+++ trunk/SKBookmark.h  2007-10-21 11:22:17 UTC (rev 3052)
@@ -47,9 +47,10 @@
     SKBookmarkTypeSeparator
 };
 
[EMAIL PROTECTED] BDAlias;
+
 @interface SKBookmark : NSObject <NSCopying> {
-    NSString *path;
-    NSData *aliasData;
+    BDAlias *alias;
     NSString *label;
     unsigned int pageIndex;
     NSMutableArray *children;
@@ -57,7 +58,8 @@
     int bookmarkType;
 }
 
-- (id)initWithPath:(NSString *)aPath aliasData:(NSData *)aData 
pageIndex:(unsigned)aPageIndex label:(NSString *)aLabel;
+- (id)initWithAlias:(BDAlias *)anAlias pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel;
+- (id)initWithAliasData:(NSData *)aData pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel;
 - (id)initWithPath:(NSString *)aPath pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel;
 - (id)initFolderWithChildren:(NSArray *)aChildren label:(NSString *)aLabel;
 - (id)initFolderWithLabel:(NSString *)aLabel;
@@ -69,8 +71,8 @@
 - (int)bookmarkType;
 
 - (NSString *)path;
+- (BDAlias *)alias;
 - (NSData *)aliasData;
-- (NSString *)resolvedPath;
 - (NSImage *)icon;
 - (unsigned int)pageIndex;
 - (NSNumber *)pageNumber;

Modified: trunk/SKBookmark.m
===================================================================
--- trunk/SKBookmark.m  2007-10-20 18:06:46 UTC (rev 3051)
+++ trunk/SKBookmark.m  2007-10-21 11:22:17 UTC (rev 3052)
@@ -50,8 +50,7 @@
 #define CHILDREN_KEY    @"children"
 #define LABEL_KEY       @"label"
 #define PAGE_INDEX_KEY  @"pageIndex"
-#define PATH_KEY        @"path"
-#define ALIAS_KEY       @"_BDAlias"
+#define ALIAS_DATA_KEY  @"_BDAlias"
 #define TYPE_KEY        @"type"
 
 @implementation SKBookmark
@@ -79,11 +78,10 @@
     return icon;
 }
 
-- (id)initWithPath:(NSString *)aPath aliasData:(NSData *)aData 
pageIndex:(unsigned)aPageIndex label:(NSString *)aLabel {
+- (id)initWithAlias:(BDAlias *)anAlias pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel {
     if (self = [super init]) {
         bookmarkType = SKBookmarkTypeBookmark;
-        path = [aPath copy];
-        aliasData = [aData copy];
+        alias = [anAlias retain];
         pageIndex = aPageIndex;
         label = [aLabel copy];
         children = nil;
@@ -91,15 +89,18 @@
     return self;
 }
 
+- (id)initWithAliasData:(NSData *)aData pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel {
+    return [self initWithAlias:[BDAlias aliasWithData:aData] 
pageIndex:aPageIndex label:aLabel];
+}
+
 - (id)initWithPath:(NSString *)aPath pageIndex:(unsigned)aPageIndex 
label:(NSString *)aLabel {
-    return [self initWithPath:aPath aliasData:[[BDAlias aliasWithPath:aPath] 
aliasData] pageIndex:aPageIndex label:aLabel];
+    return [self initWithAlias:[BDAlias aliasWithPath:aPath] 
pageIndex:aPageIndex label:aLabel];
 }
 
 - (id)initFolderWithChildren:(NSArray *)aChildren label:(NSString *)aLabel {
     if (self = [super init]) {
         bookmarkType = SKBookmarkTypeFolder;
-        path = nil;
-        aliasData = nil;
+        alias = nil;
         pageIndex = NSNotFound;
         label = [aLabel copy];
         children = [aChildren mutableCopy];
@@ -115,8 +116,7 @@
 - (id)initSeparator {
     if (self = [super init]) {
         bookmarkType = SKBookmarkTypeSeparator;
-        path = nil;
-        aliasData = nil;
+        alias = nil;
         pageIndex = NSNotFound;
         label = nil;
         children = nil;
@@ -135,7 +135,7 @@
     } else if ([[dictionary objectForKey:TYPE_KEY] 
isEqualToString:SKBookmarkTypeSeparatorString]) {
         return [self initSeparator];
     } else {
-        return [self initWithPath:[dictionary objectForKey:PATH_KEY] 
aliasData:[dictionary objectForKey:ALIAS_KEY] pageIndex:[[dictionary 
objectForKey:PAGE_INDEX_KEY] unsignedIntValue] label:[dictionary 
objectForKey:LABEL_KEY]];
+        return [self initWithAliasData:[dictionary 
objectForKey:ALIAS_DATA_KEY] pageIndex:[[dictionary 
objectForKey:PAGE_INDEX_KEY] unsignedIntValue] label:[dictionary 
objectForKey:LABEL_KEY]];
     }
 }
 
@@ -145,13 +145,12 @@
     else if (bookmarkType == SKBookmarkTypeSeparator)
         return [[[self class] allocWithZone:aZone] initSeparator];
     else
-        return [[[self class] allocWithZone:aZone] initWithPath:path 
aliasData:aliasData pageIndex:pageIndex label:label];
+        return [[[self class] allocWithZone:aZone] initWithAlias:alias 
pageIndex:pageIndex label:label];
 }
 
 - (void)dealloc {
     [[[SKBookmarkController sharedBookmarkController] undoManager] 
removeAllActionsWithTarget:self];
-    [path release];
-    [aliasData release];
+    [alias release];
     [label release];
     [children release];
     [super dealloc];
@@ -163,7 +162,7 @@
     else if (bookmarkType == SKBookmarkTypeSeparator)
         return [NSString stringWithFormat:@"<%@: separator>", [self class]];
     else
-        return [NSString stringWithFormat:@"<%@: label=%@, path=%@, page=%i>", 
[self class], label, path, pageIndex];
+        return [NSString stringWithFormat:@"<%@: label=%@, path=%@, page=%i>", 
[self class], label, [self path], pageIndex];
 }
 
 - (NSDictionary *)dictionaryValue {
@@ -172,7 +171,7 @@
     else if (bookmarkType == SKBookmarkTypeSeparator)
         return [NSDictionary 
dictionaryWithObjectsAndKeys:SKBookmarkTypeSeparatorString, TYPE_KEY, nil];
     else
-        return [NSDictionary 
dictionaryWithObjectsAndKeys:SKBookmarkTypeBookmarkString, TYPE_KEY, path, 
PATH_KEY, aliasData, ALIAS_KEY, [NSNumber numberWithUnsignedInt:pageIndex], 
PAGE_INDEX_KEY, label, LABEL_KEY, nil];
+        return [NSDictionary 
dictionaryWithObjectsAndKeys:SKBookmarkTypeBookmarkString, TYPE_KEY, [self 
aliasData], ALIAS_DATA_KEY, [NSNumber numberWithUnsignedInt:pageIndex], 
PAGE_INDEX_KEY, label, LABEL_KEY, nil];
 }
 
 - (int)bookmarkType {
@@ -180,18 +179,15 @@
 }
 
 - (NSString *)path {
-    return [[path retain] autorelease];
+    return [alias fullPathNoUI];
 }
 
-- (NSData *)aliasData {
-    return aliasData;
+- (BDAlias *)alias {
+    return alias;
 }
 
-- (NSString *)resolvedPath {
-    NSString *resolvedPath = [[BDAlias aliasWithData:aliasData] fullPathNoUI];
-    if (resolvedPath == nil)
-        resolvedPath = path;
-    return resolvedPath;
+- (NSData *)aliasData {
+    return [alias aliasData];
 }
 
 - (NSImage *)icon {
@@ -200,7 +196,7 @@
     else if (bookmarkType == SKBookmarkTypeSeparator)
         return nil;
     else
-        return [[self class] smallImageForFile:[self resolvedPath]];
+        return [[self class] smallImageForFile:[self path]];
 }
 
 - (unsigned int)pageIndex {

Modified: trunk/SKBookmarkController.m
===================================================================
--- trunk/SKBookmarkController.m        2007-10-20 18:06:46 UTC (rev 3051)
+++ trunk/SKBookmarkController.m        2007-10-21 11:22:17 UTC (rev 3052)
@@ -66,7 +66,8 @@
 
 #define PAGE_INDEX_KEY          @"pageIndex"
 #define PATH_KEY                @"path"
-#define ALIAS_KEY               @"_BDAlias"
+#define ALIAS_KEY               @"alias"
+#define ALIAS_DATA_KEY          @"_BDAlias"
 #define SNAPSHOTS_KEY           @"snapshots"
 
 @implementation SKBookmarkController
@@ -96,7 +97,7 @@
             NSString *error = nil;
             NSPropertyListFormat format = NSPropertyListBinaryFormat_v1_0;
             id plist = [NSPropertyListSerialization propertyListFromData:data
-                                                        
mutabilityOption:NSPropertyListImmutable
+                                                        
mutabilityOption:NSPropertyListMutableContainers
                                                                   
format:&format 
                                                         
errorDescription:&error];
             
@@ -168,13 +169,13 @@
     if (row != -1) {
         SKBookmark *bookmark = [outlineView itemAtRow:row];
         if ([bookmark bookmarkType] == SKBookmarkTypeBookmark) {
-            message = [bookmark resolvedPath];
+            message = [bookmark path];
         } else if ([bookmark bookmarkType] == SKBookmarkTypeFolder) {
             int count = [[bookmark children] count];
             message = count == 1 ? NSLocalizedString(@"1 item", @"Bookmark 
folder description") : [NSString stringWithFormat:NSLocalizedString(@"%i 
items", @"Bookmark folder description"), count];
         }
     }
-    [statusBar setLeftStringValue:message];
+    [statusBar setLeftStringValue:message ? message : @""];
 }
 
 #pragma mark Bookmarks
@@ -273,16 +274,18 @@
 }
 
 - (unsigned int)indexOfRecentDocumentAtPath:(NSString *)path {
-    unsigned int index = [[recentDocuments valueForKey:PATH_KEY] 
indexOfObject:path];
-    if (index == NSNotFound) {
-        unsigned int i, iMax = [recentDocuments count];
-        for (i = 0; i < iMax; i++) {
-            NSData *aliasData = [[recentDocuments objectAtIndex:i] 
valueForKey:ALIAS_KEY];
-            if ([[[BDAlias aliasWithData:aliasData] fullPathNoUI] 
isEqualToString:path]) {
-                index = i;
-                break;
-            }
+    unsigned int index = NSNotFound, i, iMax = [recentDocuments count];
+    for (i = 0; i < iMax; i++) {
+        NSMutableDictionary *info = [recentDocuments objectAtIndex:i];
+        BDAlias *alias = [info valueForKey:ALIAS_KEY];
+        if (alias == nil) {
+            alias = [BDAlias aliasWithData:[info valueForKey:ALIAS_DATA_KEY]];
+            [info setValue:alias forKey:ALIAS_KEY];
         }
+        if ([[alias fullPathNoUI] isEqualToString:path]) {
+            index = i;
+            break;
+        }
     }
     return index;
 }
@@ -296,7 +299,7 @@
         [recentDocuments removeObjectAtIndex:index];
     
     NSData *data = [[BDAlias aliasWithPath:path] aliasData];
-    NSMutableDictionary *bm = [NSMutableDictionary 
dictionaryWithObjectsAndKeys:path, PATH_KEY, [NSNumber 
numberWithUnsignedInt:pageIndex], PAGE_INDEX_KEY, data, ALIAS_KEY, [setups 
count] ? setups : nil, SNAPSHOTS_KEY, nil];
+    NSMutableDictionary *bm = [NSMutableDictionary 
dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:pageIndex], 
PAGE_INDEX_KEY, data, ALIAS_DATA_KEY, [setups count] ? setups : nil, 
SNAPSHOTS_KEY, nil];
     [recentDocuments insertObject:bm atIndex:0];
     if ([recentDocuments count] > maxRecentDocumentsCount)
         [recentDocuments removeLastObject];
@@ -353,7 +356,7 @@
     
     while (bm = [bmEnum nextObject]) {
         id document = nil;
-        NSString *path = [bm resolvedPath];
+        NSString *path = [bm path];
         NSURL *fileURL = path ? [NSURL fileURLWithPath:path] : nil;
         NSError *error;
         
@@ -488,7 +491,7 @@
             int count = [[item children] count];
             return count == 1 ? NSLocalizedString(@"1 item", @"Bookmark folder 
description") : [NSString stringWithFormat:NSLocalizedString(@"%i items", 
@"Bookmark folder description"), count];
         } else {
-            return [item resolvedPath];
+            return [item path];
         }
     } else if ([tcID isEqualToString:@"page"]) {
         return [[item pageNumber] stringValue];
@@ -583,7 +586,7 @@
     if ([tcID isEqualToString:@"label"]) {
         return [item label];
     } else if ([tcID isEqualToString:@"file"]) {
-        return [item resolvedPath];
+        return [item path];
     } else if ([tcID isEqualToString:@"page"]) {
         return [[item pageNumber] stringValue];
     }


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to