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

Reply via email to