Merge pull request #61 from nevack/nevack/notifications
Show album art with UserNotification api.CQTexperiment
commit
1aa9b5a01c
|
@ -174,6 +174,37 @@ didReceiveNotificationResponse:(UNNotificationResponse *)response
|
||||||
content.sound = nil;
|
content.sound = nil;
|
||||||
content.categoryIdentifier = @"play";
|
content.categoryIdentifier = @"play";
|
||||||
|
|
||||||
|
if ([defaults boolForKey:@"notifications.show-album-art"] && [pe albumArtInternal]) {
|
||||||
|
NSError *error = nil;
|
||||||
|
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||||
|
NSURL *tmpSubFolderURL = [[NSURL fileURLWithPath:NSTemporaryDirectory()]
|
||||||
|
URLByAppendingPathComponent:@"cog-artworks-cache" isDirectory:true];
|
||||||
|
if ([fileManager createDirectoryAtPath:[tmpSubFolderURL path]
|
||||||
|
withIntermediateDirectories:true
|
||||||
|
attributes:nil
|
||||||
|
error:&error]) {
|
||||||
|
NSString *tmpFileName = [[NSProcessInfo.processInfo globallyUniqueString] stringByAppendingString:@".jpg"];
|
||||||
|
NSURL *fileURL = [tmpSubFolderURL URLByAppendingPathComponent:tmpFileName];
|
||||||
|
NSImage *image = [pe albumArt];
|
||||||
|
CGImageRef cgRef = [image CGImageForProposedRect:NULL context:nil hints:nil];
|
||||||
|
NSBitmapImageRep *newRep = [[NSBitmapImageRep alloc] initWithCGImage:cgRef];
|
||||||
|
NSData *jpgData = [newRep representationUsingType:NSBitmapImageFileTypeJPEG
|
||||||
|
properties:@{NSImageCompressionFactor: @0.5f}];
|
||||||
|
[jpgData writeToURL:fileURL atomically:YES];
|
||||||
|
|
||||||
|
UNNotificationAttachment *icon = [UNNotificationAttachment attachmentWithIdentifier:@"art"
|
||||||
|
URL:fileURL
|
||||||
|
options:nil
|
||||||
|
error:&error];
|
||||||
|
if (error) {
|
||||||
|
// We have size limit of 10MB per image attachment.
|
||||||
|
NSLog(@"%@", error.localizedDescription);
|
||||||
|
} else {
|
||||||
|
content.attachments = @[icon];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"PlayTrack" content:content trigger:nil];
|
UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"PlayTrack" content:content trigger:nil];
|
||||||
|
|
||||||
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
|
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
<outlet property="appearanceView" destination="CgN-sy-RmM" id="wvB-aW-Gfx"/>
|
<outlet property="appearanceView" destination="CgN-sy-RmM" id="wvB-aW-Gfx"/>
|
||||||
<outlet property="growlView" destination="U4w-jw-ca5" id="IUJ-gB-jwT"/>
|
<outlet property="growlView" destination="U4w-jw-ca5" id="IUJ-gB-jwT"/>
|
||||||
<outlet property="hotKeyPane" destination="6" id="14"/>
|
<outlet property="hotKeyPane" destination="6" id="14"/>
|
||||||
|
<outlet property="iTunesStyleCheck" destination="AIz-WH-Wqk" id="2n1-pY-cZR"/>
|
||||||
<outlet property="midiPane" destination="i5B-ga-Atm" id="rbe-uK-5n2"/>
|
<outlet property="midiPane" destination="i5B-ga-Atm" id="rbe-uK-5n2"/>
|
||||||
<outlet property="outputPane" destination="57" id="75"/>
|
<outlet property="outputPane" destination="57" id="75"/>
|
||||||
<outlet property="playlistView" destination="231" id="244"/>
|
<outlet property="playlistView" destination="231" id="244"/>
|
||||||
|
@ -400,12 +401,12 @@
|
||||||
<point key="canvasLocation" x="-78" y="-31.5"/>
|
<point key="canvasLocation" x="-78" y="-31.5"/>
|
||||||
</customView>
|
</customView>
|
||||||
<customView id="U4w-jw-ca5" userLabel="GrowlView">
|
<customView id="U4w-jw-ca5" userLabel="GrowlView">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="500" height="114"/>
|
<rect key="frame" x="0.0" y="0.0" width="500" height="94"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="njn-Xl-9k9">
|
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="njn-Xl-9k9">
|
||||||
<rect key="frame" x="18" y="78" width="158" height="18"/>
|
<rect key="frame" x="18" y="58" width="158" height="18"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<buttonCell key="cell" type="check" title="Enable notifications" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="hqT-nY-NoU">
|
<buttonCell key="cell" type="check" title="Enable notifications" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="hqT-nY-NoU">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
|
@ -415,7 +416,7 @@
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="AIz-WH-Wqk">
|
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="AIz-WH-Wqk">
|
||||||
<rect key="frame" x="18" y="58" width="131" height="18"/>
|
<rect key="frame" x="18" y="18" width="131" height="18"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<buttonCell key="cell" type="check" title="Use iTunes style" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="cOb-hQ-7K8">
|
<buttonCell key="cell" type="check" title="Use iTunes style" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="cOb-hQ-7K8">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
IBOutlet NSView *growlView;
|
IBOutlet NSView *growlView;
|
||||||
IBOutlet NSView *appearanceView;
|
IBOutlet NSView *appearanceView;
|
||||||
IBOutlet NSView *midiView;
|
IBOutlet NSView *midiView;
|
||||||
|
|
||||||
|
__weak IBOutlet NSButton *iTunesStyleCheck;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (HotKeyPane *)hotKeyPane;
|
- (HotKeyPane *)hotKeyPane;
|
||||||
|
|
|
@ -71,6 +71,15 @@
|
||||||
|
|
||||||
- (GeneralPreferencePane *)growlPane
|
- (GeneralPreferencePane *)growlPane
|
||||||
{
|
{
|
||||||
|
if (@available(macOS 10.14, *)) {
|
||||||
|
if (iTunesStyleCheck) {
|
||||||
|
iTunesStyleCheck.hidden = YES;
|
||||||
|
NSSize size = growlView.frame.size;
|
||||||
|
size.height -= 18;
|
||||||
|
[growlView setFrameSize:size];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return [GeneralPreferencePane preferencePaneWithView:growlView title:NSLocalizedStringFromTableInBundle(@"Growl", nil, [NSBundle bundleForClass:[self class]], @"") iconNamed:@"growl"];
|
return [GeneralPreferencePane preferencePaneWithView:growlView title:NSLocalizedStringFromTableInBundle(@"Growl", nil, [NSBundle bundleForClass:[self class]], @"") iconNamed:@"growl"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue