mirror of
https://github.com/sparkle-project/Sparkle.git
synced 2025-11-01 15:34:38 +00:00
131 lines
4.2 KiB
Objective-C
131 lines
4.2 KiB
Objective-C
//
|
|
// SUInstallUpdateViewController.m
|
|
// Sparkle
|
|
//
|
|
// Created by Mayur Pawashe on 3/5/16.
|
|
// Copyright © 2016 Sparkle Project. All rights reserved.
|
|
//
|
|
|
|
#import "SUInstallUpdateViewController.h"
|
|
|
|
@interface SUInstallUpdateViewController ()
|
|
|
|
@property (nonatomic) IBOutlet NSButton *skipUpdatesButton;
|
|
@property (nonatomic) IBOutlet NSTextView *textView;
|
|
@property (nonatomic, readonly) SUAppcastItem *appcastItem;
|
|
@property (nonatomic, nullable) NSAttributedString *preloadedReleaseNotes;
|
|
@property (nonatomic, copy) void (^reply)(SPUUserUpdateChoice);
|
|
|
|
@end
|
|
|
|
@implementation SUInstallUpdateViewController
|
|
|
|
@synthesize skipUpdatesButton = _skipUpdatesButton;
|
|
@synthesize textView = _textView;
|
|
@synthesize preloadedReleaseNotes = _preloadedReleaseNotes;
|
|
@synthesize appcastItem = _appcastItem;
|
|
@synthesize reply = _reply;
|
|
|
|
- (instancetype)initWithAppcastItem:(SUAppcastItem *)appcastItem reply:(void (^)(SPUUserUpdateChoice))reply
|
|
{
|
|
self = [super initWithNibName:@"SUInstallUpdateViewController" bundle:nil];
|
|
if (self != nil) {
|
|
_appcastItem = appcastItem;
|
|
self.reply = reply;
|
|
} else {
|
|
assert(false);
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)viewDidLoad
|
|
{
|
|
[super viewDidLoad];
|
|
|
|
[[self.textView enclosingScrollView] setDrawsBackground:NO];
|
|
[self.textView setDrawsBackground:NO];
|
|
|
|
if (self.preloadedReleaseNotes != nil) {
|
|
[self displayReleaseNotes:self.preloadedReleaseNotes];
|
|
self.preloadedReleaseNotes = nil;
|
|
} else if (self.appcastItem.releaseNotesURL == nil) {
|
|
NSString *descriptionHTML = self.appcastItem.itemDescription;
|
|
if (descriptionHTML != nil) {
|
|
NSData *htmlData = [descriptionHTML dataUsingEncoding:NSUTF8StringEncoding];
|
|
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithHTML:htmlData documentAttributes:NULL];
|
|
[self displayReleaseNotes:attributedString];
|
|
}
|
|
}
|
|
}
|
|
|
|
- (void)displayReleaseNotes:(NSAttributedString *)releaseNotes
|
|
{
|
|
if (self.textView == nil) {
|
|
self.preloadedReleaseNotes = releaseNotes;
|
|
} else {
|
|
[self.textView.textStorage setAttributedString:releaseNotes];
|
|
}
|
|
}
|
|
|
|
- (void)displayHTMLReleaseNotes:(NSData *)releaseNotes
|
|
{
|
|
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithHTML:releaseNotes documentAttributes:NULL];
|
|
[self displayReleaseNotes:attributedString];
|
|
}
|
|
|
|
- (void)displayPlainTextReleaseNotes:(NSData *)releaseNotes encoding:(NSStringEncoding)encoding
|
|
{
|
|
NSString *string = [[NSString alloc] initWithData:releaseNotes encoding:encoding];
|
|
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:string attributes:nil];
|
|
[self displayReleaseNotes:attributedString];
|
|
}
|
|
|
|
- (void)showReleaseNotesWithDownloadData:(SPUDownloadData *)downloadData
|
|
{
|
|
// Partially copied from SPUCommandLineUserDriver
|
|
// Not all user drivers need this kind of implementation (eg: see SPUStandardUserDriver)
|
|
// Also I'm not extremely confident about the correctness of this code so I don't want to export it publicly
|
|
if (downloadData.MIMEType != nil && [downloadData.MIMEType isEqualToString:@"text/plain"]) {
|
|
NSStringEncoding encoding;
|
|
if (downloadData.textEncodingName == nil) {
|
|
encoding = NSUTF8StringEncoding;
|
|
} else {
|
|
CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)downloadData.textEncodingName);
|
|
if (cfEncoding != kCFStringEncodingInvalidId) {
|
|
encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding);
|
|
} else {
|
|
encoding = NSUTF8StringEncoding;
|
|
}
|
|
}
|
|
[self displayPlainTextReleaseNotes:downloadData.data encoding:encoding];
|
|
} else {
|
|
[self displayHTMLReleaseNotes:downloadData.data];
|
|
}
|
|
}
|
|
|
|
- (IBAction)installUpdate:(id)__unused sender
|
|
{
|
|
if (self.reply != nil) {
|
|
self.reply(SPUUserUpdateChoiceInstall);
|
|
self.reply = nil;
|
|
}
|
|
}
|
|
|
|
- (IBAction)installUpdateLater:(id)__unused sender
|
|
{
|
|
if (self.reply != nil) {
|
|
self.reply(SPUUserUpdateChoiceDismiss);
|
|
self.reply = nil;
|
|
}
|
|
}
|
|
|
|
- (IBAction)skipUpdate:(id)__unused sender
|
|
{
|
|
if (self.reply != nil) {
|
|
self.reply(SPUUserUpdateChoiceSkip);
|
|
self.reply = nil;
|
|
}
|
|
}
|
|
|
|
@end
|