git / moonbite-core / src/qt/macnotificationhandler.mm · raw
// Copyright (c) 2011-2020 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#include "macnotificationhandler.h"#undef slots#import <objc/runtime.h>#include <Cocoa/Cocoa.h>// Add an obj-c category (extension) to return the expected bundle identifier@implementation NSBundle(returnCorrectIdentifier)- (NSString *)__bundleIdentifier{ if (self == [NSBundle mainBundle]) { return @"org.litecoin.Litecoin-Qt"; } else { return [self __bundleIdentifier]; }}@endvoid MacNotificationHandler::showNotification(const QString &title, const QString &text){ // check if users OS has support for NSUserNotification if(this->hasUserNotificationCenterSupport()) { NSUserNotification* userNotification = [[NSUserNotification alloc] init]; userNotification.title = title.toNSString(); userNotification.informativeText = text.toNSString(); [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification: userNotification]; [userNotification release]; }}bool MacNotificationHandler::hasUserNotificationCenterSupport(void){ Class possibleClass = NSClassFromString(@"NSUserNotificationCenter"); // check if users OS has support for NSUserNotification if(possibleClass!=nil) { return true; } return false;}MacNotificationHandler *MacNotificationHandler::instance(){ static MacNotificationHandler *s_instance = nullptr; if (!s_instance) { s_instance = new MacNotificationHandler(); Class aPossibleClass = objc_getClass("NSBundle"); if (aPossibleClass) { // change NSBundle -bundleIdentifier method to return a correct bundle identifier // a bundle identifier is required to use OSXs User Notification Center method_exchangeImplementations(class_getInstanceMethod(aPossibleClass, @selector(bundleIdentifier)), class_getInstanceMethod(aPossibleClass, @selector(__bundleIdentifier))); } } return s_instance;}