Revision: 14699
http://sourceforge.net/p/skim-app/code/14699
Author: hofman
Date: 2024-11-15 23:33:49 +0000 (Fri, 15 Nov 2024)
Log Message:
-----------
Set download controller as weak property on downloads and as ivar of app
controller, no need for instanton download controller
Modified Paths:
--------------
trunk/SKApplicationController.h
trunk/SKApplicationController.m
trunk/SKDocumentController.m
trunk/SKDownload.h
trunk/SKDownload.m
trunk/SKDownloadController.h
trunk/SKDownloadController.m
Modified: trunk/SKApplicationController.h
===================================================================
--- trunk/SKApplicationController.h 2024-11-15 22:55:32 UTC (rev 14698)
+++ trunk/SKApplicationController.h 2024-11-15 23:33:49 UTC (rev 14699)
@@ -44,7 +44,7 @@
extern NSString *SKPageLabelsChangedNotification;
-@class SKBookmark, SKDownload, SKPreferenceController,
SKReleaseNotesController, SKInfoWindowController;
+@class SKBookmark, SKDownload, SKPreferenceController,
SKReleaseNotesController, SKInfoWindowController, SKDownloadController;
@interface SKApplicationController : NSObject <SKApplicationDelegate,
HIDRemoteDelegate, NSMenuDelegate> {
NSMenu *noteColumnsMenu;
@@ -56,6 +56,7 @@
SKPreferenceController *preferenceController;
SKReleaseNotesController *releaseNotesController;
SKInfoWindowController *infoWindowController;
+ SKDownloadController *downloadController;
}
- (IBAction)orderFrontLineInspector:(nullable id)sender;
@@ -75,6 +76,8 @@
@property (nonatomic) NSTextAlignment defaultAlignment;
@property (nonatomic) PDFTextAnnotationIconType defaultIconType;
+@property (nonatomic, readonly) SKDownloadController *downloadController;
+
@property (nonatomic, readonly) NSArray<SKBookmark *> *bookmarks;
- (void)insertObject:(SKBookmark *)bookmark
inBookmarksAtIndex:(NSUInteger)anIndex;
- (void)removeObjectFromBookmarksAtIndex:(NSUInteger)anIndex;
Modified: trunk/SKApplicationController.m
===================================================================
--- trunk/SKApplicationController.m 2024-11-15 22:55:32 UTC (rev 14698)
+++ trunk/SKApplicationController.m 2024-11-15 23:33:49 UTC (rev 14699)
@@ -119,7 +119,7 @@
@implementation SKApplicationController
@synthesize noteColumnsMenu, noteTypeMenu;
-@dynamic favoriteColors, defaultStartLineStyle, defaultEndLineStyle,
defaultAlignment, defaultIconType, bookmarks, downloads;
+@dynamic downloadController, favoriteColors, defaultStartLineStyle,
defaultEndLineStyle, defaultAlignment, defaultIconType, bookmarks, downloads;
+ (void)initialize{
SKINITIALIZE;
@@ -273,6 +273,14 @@
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:SKIsRelaunchKey];
}
+#pragma mark Download Controller
+
+- (SKDownloadController *)downloadController {
+ if (downloadController == nil)
+ downloadController = [[SKDownloadController alloc] init];
+ return downloadController;
+}
+
#pragma mark Actions
- (IBAction)orderFrontLineInspector:(id)sender {
@@ -314,7 +322,7 @@
}
- (IBAction)showDownloads:(id)sender{
- [[SKDownloadController sharedDownloadController] showWindow:self];
+ [[self downloadController] showWindow:self];
}
- (IBAction)getInfo:(id)sender {
@@ -469,7 +477,7 @@
}];
}
} else if (theURL) {
- [[SKDownloadController sharedDownloadController]
addDownloadForURL:theURL];
+ [[self downloadController] addDownloadForURL:theURL];
}
}
}
@@ -515,19 +523,19 @@
}
- (NSArray *)downloads {
- return [[SKDownloadController sharedDownloadController] downloads];
+ return [[self downloadController] downloads];
}
- (void)insertObject:(SKDownload *)download
inDownloadsAtIndex:(NSUInteger)anIndex {
- [[SKDownloadController sharedDownloadController]
addObjectToDownloads:download];
+ [[self downloadController] addObjectToDownloads:download];
if ([[NSUserDefaults standardUserDefaults]
boolForKey:SKAutoOpenDownloadsWindowKey])
- [[SKDownloadController sharedDownloadController] showWindow:nil];
+ [[self downloadController] showWindow:nil];
}
- (void)removeObjectFromDownloadsAtIndex:(NSUInteger)anIndex {
- SKDownload *download = [[[SKDownloadController sharedDownloadController]
downloads] objectAtIndex:anIndex];
+ SKDownload *download = [[[self downloadController] downloads]
objectAtIndex:anIndex];
if ([download canRemove])
- [[SKDownloadController sharedDownloadController]
removeObjectFromDownloads:download];
+ [[self downloadController] removeObjectFromDownloads:download];
}
- (SKNotePrefs *)valueInNotePreferencesWithName:(NSString *)name {
Modified: trunk/SKDocumentController.m
===================================================================
--- trunk/SKDocumentController.m 2024-11-15 22:55:32 UTC (rev 14698)
+++ trunk/SKDocumentController.m 2024-11-15 23:33:49 UTC (rev 14699)
@@ -41,6 +41,8 @@
#import "SKMainDocument.h"
#import "SKNotesDocument.h"
#import "SKDownloadController.h"
+#import "SKDownload.h"
+#import "SKApplicationController.h"
#import "SKTemplateManager.h"
#import "SKBookmarkController.h"
#import "SKBookmark.h"
@@ -346,7 +348,11 @@
}
}
} else if (showNotes == NO && theURL) {
- BOOL success = [[SKDownloadController sharedDownloadController]
addDownloadForURL:theURL];
+ BOOL success = [[NSApp delegate] application:NSApp
delegateHandlesKey:@"downloads"];
+ if (success) {
+ SKDownload *download = [[SKDownload alloc] initWithURL:theURL];
+ [[(id)[NSApp delegate] mutableArrayValueForKey:@"downloads"]
addObject:download];
+ }
if (completionHandler)
completionHandler(nil, NO, success ? nil : [NSError
readFileErrorWithLocalizedDescription:NSLocalizedString(@"Unable to load file",
@"Error description")]);
} else if (completionHandler) {
Modified: trunk/SKDownload.h
===================================================================
--- trunk/SKDownload.h 2024-11-15 22:55:32 UTC (rev 14698)
+++ trunk/SKDownload.h 2024-11-15 23:33:49 UTC (rev 14699)
@@ -54,7 +54,10 @@
SKDownloadStatusCanceled
};
+@class SKDownloadController;
+
@interface SKDownload : NSObject <QLPreviewItem> {
+ __weak SKDownloadController *downloadController;
NSURL *URL;
NSURLSessionDownloadTask *downloadTask;
int64_t expectedContentLength;
@@ -95,6 +98,8 @@
@property (nonatomic, nullable, readonly) NSString *scriptingURL;
@property (nonatomic) SKDownloadStatus scriptingStatus;
+@property (nonatomic, weak) SKDownloadController *downloadController;
+
@property (class, nonatomic, readonly) NSImage *deleteImage;
@property (class, nonatomic, readonly) NSImage *cancelImage;
@property (class, nonatomic, readonly) NSImage *resumeImage;
Modified: trunk/SKDownload.m
===================================================================
--- trunk/SKDownload.m 2024-11-15 22:55:32 UTC (rev 14698)
+++ trunk/SKDownload.m 2024-11-15 23:33:49 UTC (rev 14699)
@@ -59,7 +59,7 @@
@implementation SKDownload
-@synthesize URL, resumeData, fileURL, fileIcon, expectedContentLength,
receivedContentLength, status;
+@synthesize URL, resumeData, fileURL, fileIcon, expectedContentLength,
receivedContentLength, status, downloadController;
@dynamic properties, fileName, statusDescription, hasExpectedContentLength,
downloading, canCancel, canRemove, canResume, cancelImage, resumeImage,
cancelToolTip, resumeToolTip, scriptingURL, scriptingStatus;
static NSSet *keysAffectedByStatus = nil;
@@ -240,7 +240,7 @@
}
- (NSScriptObjectSpecifier *)objectSpecifier {
- NSUInteger idx = [[[SKDownloadController sharedDownloadController]
downloads] indexOfObjectIdenticalTo:self];
+ NSUInteger idx = [[downloadController downloads]
indexOfObjectIdenticalTo:self];
if (idx != NSNotFound) {
NSScriptClassDescription *containerClassDescription =
[NSScriptClassDescription classDescriptionForClass:[NSApp class]];
return [[NSIndexSpecifier alloc]
initWithContainerClassDescription:containerClassDescription
containerSpecifier:nil key:@"downloads" index:idx];
@@ -277,7 +277,7 @@
[self setExpectedContentLength:NSURLResponseUnknownLength];
[self setReceivedContentLength:0];
receivedResponse = NO;
- downloadTask = [[SKDownloadController sharedDownloadController]
newDownloadTaskForDownload:self];
+ downloadTask = [downloadController newDownloadTaskForDownload:self];
[self setStatus:SKDownloadStatusDownloading];
}
@@ -285,7 +285,7 @@
if ([self canCancel]) {
[downloadTask cancelByProducingResumeData:^(NSData *data){ [self
setResumeData:data]; }];
- [[SKDownloadController sharedDownloadController]
removeDownloadTask:downloadTask];
+ [downloadController removeDownloadTask:downloadTask];
downloadTask = nil;
[self setStatus:SKDownloadStatusCanceled];
}
@@ -297,7 +297,7 @@
if (resumeData) {
receivedResponse = NO;
- downloadTask = [[SKDownloadController sharedDownloadController]
newDownloadTaskForDownload:self];
+ downloadTask = [downloadController
newDownloadTaskForDownload:self];
resumeData = nil;
[self setStatus:SKDownloadStatusDownloading];
@@ -308,7 +308,7 @@
if (downloadTask) {
if ([downloadTask state] < NSURLSessionTaskStateCanceling)
[downloadTask cancel];
- [[SKDownloadController sharedDownloadController]
removeDownloadTask:downloadTask];
+ [downloadController removeDownloadTask:downloadTask];
downloadTask = nil;
}
[self start];
@@ -350,7 +350,7 @@
if ([self canCancel])
[self cancel];
else if ([self canRemove])
- [[SKDownloadController sharedDownloadController]
removeObjectFromDownloads:self];
+ [downloadController removeObjectFromDownloads:self];
}
- (NSImage *)cancelImage {
Modified: trunk/SKDownloadController.h
===================================================================
--- trunk/SKDownloadController.h 2024-11-15 22:55:32 UTC (rev 14698)
+++ trunk/SKDownloadController.h 2024-11-15 23:33:49 UTC (rev 14699)
@@ -60,8 +60,6 @@
@property (nonatomic, nullable, strong) IBOutlet SKTableView *tableView;
@property (nonatomic, nullable, strong) IBOutlet NSButton *clearButton;
-@property (class, nonatomic, readonly) SKDownloadController
*sharedDownloadController;
-
- (BOOL)addDownloadForURL:(nullable NSURL *)aURL;
- (IBAction)showDownloadPreferences:(nullable id)sender;
Modified: trunk/SKDownloadController.m
===================================================================
--- trunk/SKDownloadController.m 2024-11-15 22:55:32 UTC (rev 14698)
+++ trunk/SKDownloadController.m 2024-11-15 23:33:49 UTC (rev 14699)
@@ -106,16 +106,7 @@
SKDownloadsIdentifier = [[[NSBundle mainBundle] bundleIdentifier]
stringByAppendingString:@".downloads"];
}
-static SKDownloadController *sharedDownloadController = nil;
-
-+ (SKDownloadController *)sharedDownloadController {
- if (sharedDownloadController == nil)
- sharedDownloadController = [[self alloc] init];
- return sharedDownloadController;
-}
-
- (instancetype)init {
- if (sharedDownloadController) NSLog(@"Attempt to allocate second instance
of %@", [self class]);
self = [super initWithWindowNibName:@"DownloadsWindow"];
if (self) {
downloads = [[NSMutableArray alloc] init];
@@ -123,6 +114,7 @@
NSDictionary *downloadsDictionary = [[NSUserDefaults
standardUserDefaults] persistentDomainForName:SKDownloadsIdentifier];
for (NSDictionary *properties in [downloadsDictionary
objectForKey:DOWNLOADS_KEY]) {
SKDownload *download = [[SKDownload alloc]
initWithProperties:properties];
+ [download setDownloadController:self];
[downloads addObject:download];
}
@@ -236,6 +228,7 @@
options = NSTableViewAnimationEffectNone;
[tableView beginUpdates];
[tableView insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:anIndex]
withAnimation:options];
+ [download setDownloadController:self];
[downloads insertObject:download atIndex:anIndex];
[tableView endUpdates];
@@ -249,6 +242,7 @@
NSArray *oldDownloads = [downloads objectsAtIndexes:indexes];
[self endObservingDownloads:oldDownloads];
[oldDownloads makeObjectsPerformSelector:@selector(cancel)];
+ [oldDownloads setValue:nil forKey:@"downloadController"];
NSTableViewAnimationOptions options = NSTableViewAnimationEffectGap |
NSTableViewAnimationSlideUp;
if ([self isWindowLoaded] == NO || [[self window] isVisible] == NO ||
[NSView shouldShowSlideAnimation] == NO)
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit